我有两个模型:
class Musician extends Model
{
public function instruments()
{
return $this->belongsToMany('App\Instrument', 'musicians_instruments');
}
}
和
class Instrument extends Model
{
public function musicians()
{
return $this->belongsToMany('App\Musician', 'musicians_instruments');
}
}
保存到数据库可以正常工作,就像我想要的那样。我的数据库中有3个表:
musicians
instruments
musicians_instruments (pivot table)
仪器-示例内容:
id name
1 guitar
2 piano
3 keyboard
4 DJ
当音乐家注册时,他可以从1到3种乐器中进行选择。 例如,当他在数据透视表中选择吉他(1)和键盘(3)时(假设音乐家的ID为2):
musicians_instruments
musician_id instrument_id
2 1
2 3
我的问题是-请帮助我如何编写查询以获取音乐家演奏的所有乐器。 如果Joe选择1、3,则如何选择他选择的所有乐器名称。
下方-MusicianController:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Musician;
use Illuminate\Support\Facades\Hash;
class MusicianController extends Controller
{
public function index()
{
$musicians = Musician::all(); // it's for other musicians data
$musician = Musician::with('instruments')->find($musician_id);
return view('musicians', compact('musicians', 'musician'));
}
答案 0 :(得分:0)
您只需使用在各个模型中定义的方法,即可为每个音乐家获取乐器:
$musician = App\Musician::find($musician_id);
$instruments = $musician->instruments()->get();
foreach($instruments as $instrument) {
// $instrument->name;
}
答案 1 :(得分:0)
对于索引页(所有音乐家及其乐器的列表):
在您的控制器中,使用以下代码:
public function index()
{
$musicians = App\Musician::with('instruments')->get();
return view('musicians', compact('musicians', 'musicians'));
}
在您的视图中,使用以下代码:
@foreach($musicians as $musician)
{{ $musician->name; }}
<ul>
@foreach ($musician->instruments as $instrument)
<li>{{ $instrument->name }}<br></li>
@endforeach
</ul>
@endforeach
对于个人资料页面(特定音乐家[id = artist_id]及其乐器的页面):
在您的控制器中,使用以下代码:
$musician = App\Musician::where("id",$musician_id)->with('instruments')->first();
return view('your/view/file', ['musician'=> $musician]);
在您的视图中,使用以下代码:
{{ $musician->name }}
@foreach($musician->instruments as $instrument)
{{ $instrument->name; }}<br>
@endforeach
有关更多详细信息,请访问:https://laravel.com/docs/6.x/eloquent-relationships