我是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');
}
}
答案 0 :(得分:1)
您要做的就是
data-myclassid="{{$cat->class_id}}"
而不是尝试这个
data-myclassid="{{ \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')}}"
我假设您的表名是class,因为您想显示类名,因此在该数据库类名(列名)中将是简单的“ name”,这就是为什么我将name放在值字段中。 >
答案 1 :(得分:0)
完全按照自己的意愿做很容易。 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
答案 2 :(得分:0)
您必须声明自己的关系。 在您的 User 模型中
public function class()
{
return $this->hasOne('App\Class');
}
和 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只是示例。可以更改哪种关系类型适合您。