我知道这可能真的很简单,但是我无法解决。
说我要取所有票
$tickets = Ticket::all();
我想用一行来获取与每个股票相关的所有用户(每张票都有一个带有user_id
的字段),只有一行代码,可以在Laravel中完成。我可以按照以下旧方法循环遍历每张票证并为每位用户提供详细信息,但我只是在这里寻找最佳实践。
foreach($tickets as $ticket):
$ticket->user = User::find($ticket->user_id);
endforeach;
答案 0 :(得分:2)
我假设您在模型中定义了正确的关系。
您可以使用laravel雄辩的关系来获取用户的所有票证
$tickets = User::with('tickets')->get();
要获取数据(如果用户至少有一张票证),可以使用以下代码
$tickets = User::has('tickets')->get();
仅获取所有门票:
$tickets = Ticket::all();
然后在刀片中可以执行以下操作:
@foreach($tickets as $ticket)
// getting user using relationship
{{ $ticket->user->name }}
@endforeach
或获取与用户关联的票证,您可以使用
$tickets = Ticket::whereHas('user', function ($q) {
$q->with('user');
})
->get();
要了解有关关系的更多信息,请访问this
答案 1 :(得分:1)
首先,您声明具有模型Ticket
的关系模型User
:
这是模型Ticket
中的代码:
public function user()
{
return $this->hasOne('App\Model\User', 'user_id', 'id'); //id is the primary key in User table
}
然后使用用户信息获取所有票证
$tickets = Ticket::load('user')->all();
或
$tickets = Ticket::with('user')->all();
答案 2 :(得分:0)
如果要获取具有用户的所有票证的列表以及与每个票证关联的用户,请尝试以下操作:
$tickets = Ticket::whereHas('user', function ($query) {
$query->with('user');
})
->get();
如果您确定所有票证都具有关联的用户,请使用以下方法:
$tickets = Ticket::with('user')->get();