2015-11-24 5 views
1

У меня есть 3 таблицы в моей базе данных:Laravel Eloquent связь Модель

table 1 = user (hasMany order) 
table 2 = order (hasMany order_detail, belongsTo user) 
table 3 = order_detail (belongsTo order) 

На моей order_detail модели я добавить эту функцию:

public function order() { 
    return $this->belongsTo('App\Order'); 
} 

так я могу назвать данные заказа без определения его от контроллера , я просто определяю order_detail на моем контроллере

$order_detail->order->invoice_number 

но как вызвать пользовательские данные из детали заказа?

Я пытаюсь использовать этот

$order_detail->order->user 

, но он не работает для меня ..

Есть ли идея назвать великое родительское отношение?

+0

Я думаю, вы могли бы проверить это сообщение: http://stackoverflow.com/questions/33870287/relations-in-laravel-5 –

+0

@luigonsec я уже успел за 2 отношения таблицы, но теперь создать для 3 таблиц ?? $ order_dettail-> order-> user-> first_name – yudijohn

+0

То, что вы опубликовали, должно работать. Можете ли вы опубликовать код (вместо psueo-code) о том, как вы устанавливаете свои отношения? –

ответ

0

В модели заказа добавить функцию order_detail:

public function order_details() { 
    return $this->hasMany('order_detail'); 
} 

и для пользователя:

public function user() { 
    return $this->belongsTo('user'); 
} 

В пользовательской модели добавить:

public function orders() { 
    return $this->hasMany('order'); 
} 

Затем, вы можете позвонить в регуляторе :

$details = Order::find(1)->order_details->where('order_detail_id', 5)->first(); 
$userName = $details->username; 
      //   ^
      // column name in order_detail table 

Дополнительная информация в docs.

+0

Как получить имя пользователя от order_detail с идентификатором 5, например? – yudijohn

+0

Я обновил свой ответ, но я не знаю, что означает «id». Это идентификатор заказа? Вы можете изменить имя столбца в разделе clausule. –

0

Я думаю, что это более совершенный способ определить отношения:

// User model 

public function orders(){ 

    // I'm telling that users has many order. The orders have an user_id field that match with the ID field of the user. 
    return $this->hasMany('App/Order', 'user_id' , 'id'); 

} 


// Order model 

public function order_details(){ 

    // I'm telling that order has many order_details. The order_details have an order_id field that match with the ID field of the order. 
    return $this->hasMany('App/OrderDetail', 'order_id' , 'id'); 

} 

public function user(){ 

    // I'm telling that an order belongs to an user. The user has an ID field that match with the order_id field of the order. 
    return $this->belongTo('App/User', 'id', 'user_id'); 
} 


// OrderDetail Model 

public function order(){ 

    // I'm telling that an order detail belongs to an order. The order has an ID field that match with the order_id field of the order detail. 
    return $this->belongTo('App/Order', 'id', 'order_id'); 
} 

Я видел, что вы положили только название модели в качестве первого параметра в определении отношения. Я думаю, вы должны поместить относительный путь от корня к Модели. В моем случае у меня есть модели в виде дочерних элементов папки App.

Смежные вопросы