我是Laravel的新手,语法不好。我想通过外键(该表的id)查看另一个表的值。
https://ibb.co/pXRFRHn你可以在这张图片中看到我在用户和班级下获得了ID。我想要与这些ID相关联的标题。
我有表部分,用户和类。我使用class_id
和user_id作为节表中的外键。当我尝试显示数据时,我会看到id,但我想要从该ID中提取名称和其他字段。
调节器
public function index()
{
$sections = Section::all();
$classs = Classs::all();
$users = User::all();
return view('sections.index')->with('sections', $sections)->with('classs', $classs)->with('users', $users);
}
刀片/查看
<div class="box">
<div class="box-header">
<h3 class="box-title">All Sections</h3>
</div>
<div class="box-body">
<table class="table table-responsive">
<thead>
<tr>
<th>Name</th>
<th>Class</th>
<th>User</th>
<th>Modify</th>
</tr>
</thead>
<tbody>
@foreach($sections as $cat)
<tr>
<td>{{$cat->title}}</td>
<td>{{$cat->class_id}}</td>
<td>{{$cat->user_id}}</td>
<td>
<button class="btn btn-info" data-mytitle="{{$cat->title}}"
data-myclassid="{{$cat->class_id}}" data-myuserid="{{$cat->user_id}}"
data-catid={{$cat->id}} data-toggle="modal" data-target="#edit">Edit
</button>
<button class="btn btn-danger" data-catid={{$cat->id}} data-toggle="modal"
data-target="#delete">Delete
</button>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
特别...
<td>{{$cat->class_id}}</td>
从这里,我获得了类ID,但我也想要它的名字。
{{$cat->(class_id)->name}}"
但是,它没有用。
我编辑了模型
class Classs extends Model
{
//
protected $fillable = [
'id',
'title',
];
public function section()
{
return $this->belongsTo('App\Section');
}
}
剖面模型
class Section extends Model
{
//
protected $fillable = [
'id',
'title',
'class_id',
'user_id',
];
public function classs()
{
return $this->hasMany('App\Classs');
}
}
你所要做的就是
data-myclassid="{{$cat->class_id}}"
而不是这个试试这个
data-myclassid="{{ \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')}}"
我假设你的表名是类,因为你想显示类名,所以在那个数据库类名(列名)将是简单的'名称',这就是为什么我把名字放在值字段....
完全按照自己的意愿去做很容易。 Laravel擅长建立关系。
您需要将类模型设置为用户模型的关系。见the docs on how to do that
在用户模型中应该接近这个:
public function class(){
return $this->belongsTo(\App\Class::class);
}
然后,当您从控制器中的数据库中提取用户时,可以直接包含关系:
$users= \App\User::with('class')->get();
现在,您在每个用户的集合中都有相关的类模型,您可以在刀片视图中直接提取名称:
@foreach($users as $user)
{{$user->class->name}}
@endforeach
我建议首先使用上面这个简单的转储进行测试,因为这样可行。然后,您可以尝试在之后添加类别之类的不同模型。
顺便说一句 - 使用Class作为类名可能会导致问题。建议稍微改变一下。
HTH
你要声明你的人际关系。在您的用户模型中
public function class()
{
return $this->hasOne('App\Class');
}
和班级模型,
public function users()
{
return $this->hasMany('App\User');
}
所以在那之后你可以这样称呼它;
public function index()
{
$sections = Section::all();
$classs = Classs::with('user')->get();
$users = User::with('class')->get();
return view('sections.index')
->with('sections', $sections)
->with('classs', $classs)
->with('users',$users);
}
或者,当你在视野中取景时,你可以打电话给他们;
@foreach($users->class()->get() as $class )
{{ $class->name}}
@endforeach
@foreach($classes->users()->get() as $user )
{{ $user->name}}
@endforeach
他们称之为'雄辩的关系'Laravel's Relationships
只是确保你读过它们,因为文档太清楚了,无法在记录时间内理解某些内容。
hasOne和hasMany只是一个例子。哪种关系类型适用于您可以更改。