Введение
Im havning на какой-нибудь трубе, получающей данные по всем связанным элементам. Я использую Laravel в качестве службы back-up REST, выставляя Json для внешнего приложения javascript.
Структура данных
У меня есть следующие таблицы:
+----------------+ +----------------+ +-------------+
|topics | |posts | |users |
+----------------+ +----------------+ +-------------+
|id: int | |id: int | |id: int |
|title: varchar | |content: varchar| |name: varchar|
|content: varchar| |user_id: int | +-------------+
|user_id: int | |topic_id: int |
+----------------+ +----------------+
Тема имеет от 0 до многих сообщений, и у нее есть автор (пользователь)
У сообщения есть один автор (пользователь)
UML: http://i58.servimg.com/u/f58/11/26/57/95/intrep10.png
Модели Laravel
class User extends Eloquent {
protected $table = 'users';
public function topics() {
reutrn $this->hasMany('Topic');
}
public function posts() {
reutrn $this->hasMany('Post');
}
}
class Topic extends Eloquent {
protected $table = 'topics';
public function posts() {
return $this->hasMany('Post');
}
public function author() {
return $this->hasOne('User', 'id');
}
}
class Post extends Eloquent {
protected $table = 'posts';
public function topic() {
return $this->belongsTo('Topic');
}
public function author() {
return $this->hasOne('User', 'id');
}
}
контроллер
return Topic::where('id', '=', $topicId)
->with('author', 'posts.author')
->get();
Выход
[{
id: 1,
title: "My Topic",
content: "With opinions about the darkside",
user_id: 1,
created_at: "2014-03-06",
updated_at: "2014-03-06",
author: {
id: 1,
name: "JamesBond",
created_at: "2014-03-06",
updated_at: "2014-03-06",
},
posts: [{
id: 1,
content: "Reply 1 on topic 1",
user_id: 1,
created_at: "2014-03-06",
updated_at: "2014-03-06",
author: {
id: 1,
name: "JamesBond",
created_at: "2014-03-06",
updated_at: "2014-03-06",
},
},
{
id: 2,
content: "Reply 2 on topic 1",
user_id: 1,
created_at: "2014-03-06",
updated_at: "2014-03-06",
author: null,
}]
}]
Вопрос
Как вы можете видеть jsoncode, оба сообщения создаются одним и тем же пользователем (с идентификатором 1), но только первый имеет объект author на нем. Любые указатели на то, как определить мою проблему, были бы идеальными.
Отказ
Это измененная версия моего проекта, так как я не хочу спамить вопрос с информацией. Если мне не хватает элементов serten на этот вопрос, я буду рад предоставить его.
Решение
Отображение моей модели отключено.
public function author() {
return $this->belongsTo('User', 'user_id', 'id');
}
гарантирует, что его user_id будет искать в таблице сообщений, против столбца id в таблице users
SELECT * FROM users WHERE id = posts.user_id;