У меня есть модель laravel
class Project extends Eloquent {
public static $timestamps = true;
public $includes = array('members','members.memberdata');
public function tasks() {
return $this->has_many('Usertask','project_id');
}
public function members() {
return $this->has_many('Projectmember','project_id');
}
}
и родственные модели
class Projectmember extends Eloquent {
public static $table = "project_members";
public static $timestamps = true;
public function project() {
return $this->belongs_to('Project');
}
public function memberdata() {
return $this->has_one('Usermetadata','user_id');
}
}
class Usermetadata extends Eloquent {
public static $table = "users_metadata";
public function user() {
return $this->belongs_to('User');
}
public function member() {
return $this->belongs_to('Projectmember','user_id');
}
}
Когда я пытаюсь получить такую модель проекта
$project = Project::find($id);
return Response::eloquent($project);
мой вывод json выглядит так
{"id":1,"user_id":1,"name":"UberWork","description":"Web based project management \/ task management app","target_date":"2013-11-15 00:00:00","budget":null,"status":0,"created_at":"2013-04-16 20:13:59","updated_at":"2013-04-16 20:13:59","members":[{"id":1,"project_id":1,"user_id":1,"created_at":"2013-04-16 20:13:59","updated_at":"2013-04-16 20:13:59","memberdata":{"user_id":1,"first_name":"Tamarakuro","last_name":"Foh","photo":"","company_name":null,"phone":null,"package":"free","subscription_start":"0000-00-00 00:00:00","subscription_end":"0000-00-00 00:00:00","api_key":"12b14a7d3ca48c53bb5b1a88fa3eca3b"}},{"id":3,"project_id":1,"user_id":3,"created_at":"2013-04-16 20:13:59","updated_at":"2013-04-16 20:13:59","memberdata":{"user_id":3,"first_name":"Ebere","last_name":"Uche","photo":"","company_name":"Chronotech Labs","phone":null,"package":"free","subscription_start":"0000-00-00 00:00:00","subscription_end":"0000-00-00 00:00:00","api_key":"ab446bd9ffbb898e818a892c7401e0f6"}},{"id":4,"project_id":1,"user_id":2,"created_at":"2013-04-17 08:13:00","updated_at":"2013-04-17 08:13:00","memberdata":null}]}
Моя база данных выглядит так:
Пользователи
- id
- Эл. адрес
- пароль
- айпи адрес
- активный
- ...
users_metadata
- id
- ID пользователя
- имя
- фамилия
- Аватар
- ...
Проекты
- id
- ID пользователя
- имя
- описание
- положение дел
- ...
project_members
- id
- project_id
- ID пользователя
Мой вопрос в том, почему последний член проекта имеет свои memberdata как «null», а остальные не равны NULL. Я делаю что-то неправильно?
id
иuser_id
вашего последнего члена не совпадают, я не знаю, имеет ли это значение, но связь будет совпадатьid
сuser_id
другой таблицы? - person Phill Sparks   schedule 18.04.2013user_id
везде? - person Phill Sparks   schedule 18.04.2013project_members.user_id = users_metadata.user_id
, но отношения всегда используютid
одной таблицы и fk (user_id
) в другой таблице. Это работает для большинства ваших данных, потому чтоproject_members.id
иproject_members.user_id
одинаковы; он ломается, когда их нет (ваш последний участник проекта). - person Phill Sparks   schedule 18.04.2013