2015-06-29 4 views
0

Я следующие модели:Eloquent: с() полей возвращают нуль

class User extends Model 
{ 
    public function messageUsers() 
    { 
     return $this->hasMany("MessageUser", "user1_id")->orWhere("user2_id", $this->id); 
    } 
} 

class MessageUser extends Model 
{ 
    public function messages() 
    { 
     return $this->hasMany("Message"); 
    } 
} 

class Message extends Model 
{ 
    public function sender() 
    { 
     return $this->belongsTo("User", "user_id", "id"); 
    } 
} 

Я хотел бы получить определенные поля от отправителя() в классе Message. Тем не менее,

$user = User::find(2); 
$msg_user = $user->messageUsers()->find(15); 
$tmp = $msg_user->messages()->with(["sender" => function($query) { $query->select("username"); }]) 

$ TMP возвращает нуль, в то время как:

$msg_user->messages()->with("sender") 

возвращает все поля, как и ожидалось.

Почему функция() не возвращает значение имени (ов) прошедшего поля?

Спасибо.

UPDATE Здесь структура таблицы:

user: 
- id 
- username 

message_users 
- id 
- user1_id 
- user2_id 

messages 
- id 
- message_user_id 
- user_id 
- content 
+0

Здравствуйте, пожалуйста, вы можете опубликовать DB схему? Или, по крайней мере, таблицы, которые вы пытаетесь связать? –

ответ

0

Одно условия для изменения положения select об отношениях является то, что ключевым поле иностранного должно быть включено, в противном случае Laravel не будет знать, как связать соответствующее объекты друг к другу после их получения из базы данных.

Добавить в внешнем ключе к вашему выбору пункту:

$tmp = $msg_user->messages()->with(["sender" => function($query) { 
    $query->select("id", "username"); 
}]); 
Смежные вопросы