Привет, ребята, я новичок в использовании Laravel, теперь я работаю с Laravel 7.2.1.
У меня есть три таблицы:
Таблица пользователей: идентификатор, имя, адрес электронной почты.
Таблица магазинов: id, nome_negozio.
Таблица user_has_shops: shop_id, user_id.
Я хочу визуализировать пользователей и соответствующие магазины, в которых они зарегистрированы.
Я уже установил отношения в пользовательской модели:
public function shops()
{
return $this->belongsToMany(Shop::class);
}
Вместо этого в магазине моделей я поставил это:
public function users()
{
return $this->belongsToMany(User::class);
}
Я не понимаю, как их правильно использовать, я установил свой пользовательский контроллер:
public function index(Request $request)
{
if ($request->ajax()) {
$data = User::latest()
->leftJoin('user_has_shops', 'user_has_shops.user_id', '=', 'users.id')
->leftJoin('shops', 'shops.id', '=', 'user_has_shops.shop_id')
->select('users.*', 'shops.nome_negozio')
->get();
return Datatables::of($data)
->addIndexColumn()
->addColumn('roles', function($row){
$btn = '<label class="badge bg-orange">Nessun Ruolo Assegnato</label>';
foreach($row->getRoleNames() as $ruoli_assegnati){
$btn = '<label class="badge bg-teal">'.$row->getRoleNames()->implode(' , ').'</label>';
}
return $btn;
})
->addColumn('shops', function($row){
//$btn = '<label class="badge bg-orange">Nessun Negozio Assegnato</label>';
$btn = '<label class="badge bg-teal">'.$row->nome_negozio
.'</label>';
return $btn;
})
->addColumn('action', function($row){
$btn = '<div class="btn-group" role="group">
<div class="btn-group" role="group">
<button type="button" class="btn btn-danger waves-effect dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Azioni
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#" class="show-modal" data-id="'.$row->id.'" data-nome="'.$row->name.'" data-email="'.$row->email.'" data-ruoli="'.$row->getRoleNames()->implode(' , ').'">Visualizza</a></li>
<li><a href="'.route('users.edit',$row->id).'">Modifica</a></li>
<li><a href="#" class="delete-modal" data-id="'.$row->id.'" data-title="'.$row->name.' - '.$row->email.'">Elimina</a></li>
</ul>
</div>
</div>';
return $btn;
})
->rawColumns(['roles','shops','action'])
->make(true);
}
return view('users.index');
}
Результат такой : введите описание изображения здесь
Как видите, ID 38 имеет два магазина, но он записан в двух разных строках, а не в одном. Я хочу лучше понять, как использовать такого рода отношения.
Спасибо за помощь.