如何在Laravel中查看外键中的表字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Laravel中查看外键中的表字段相关的知识,希望对你有一定的参考价值。

我是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('AppSection');

    }
}

剖面模型

class Section extends Model
{
    //
    protected $fillable = [
        'id',
        'title',
        'class_id',
        'user_id',

    ];


    public function classs()
    {
        return $this->hasMany('AppClasss');
    }

}
答案

你所要做的就是

data-myclassid="{{$cat->class_id}}"

而不是这个试试这个

data-myclassid="{{ IlluminateSupportFacadesDB::table('class')->where('id',$cat->class_id)->value('name')}}"

我假设你的表名是类,因为你想显示类名,所以在那个数据库类名(列名)将是简单的'名称',这就是为什么我把名字放在值字段....

另一答案

完全按照自己的意愿去做很容易。 Laravel擅长建立关系。

您需要将类模型设置为用户模型的关系。见the docs on how to do that

在用户模型中应该接近这个:

public function class(){
        return $this->belongsTo(AppClass::class);
}

然后,当您从控制器中的数据库中提取用户时,可以直接包含关系:

$users= AppUser::with('class')->get();

现在,您在每个用户的集合中都有相关的类模型,您可以在刀片视图中直接提取名称:

@foreach($users as $user)
   {{$user->class->name}}
@endforeach

我建议首先使用上面这个简单的转储进行测试,因为这样可行。然后,您可以尝试在之后添加类别之类的不同模型。

顺便说一句 - 使用Class作为类名可能会导致问题。建议稍微改变一下。

HTH

另一答案

你要声明你的人际关系。在您的用户模型中

public function class()
{
    return $this->hasOne('AppClass');
}

和班级模型,

public function users()
{
    return $this->hasMany('AppUser');
}

所以在那之后你可以这样称呼它;

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只是一个例子。哪种关系类型适用于您可以更改。

以上是关于如何在Laravel中查看外键中的表字段的主要内容,如果未能解决你的问题,请参考以下文章

在自定义主键和外键中定义 Laravel 关系

在使用 Laravel 8 创建模板时使用外键填充字段

Laravel 迁移:从现有外键中删除 onDelete('cascade')

在休眠 ORM 中使用一个强制外键和一个可选外键中的列

Laravel中带有2个外键的搜索栏

完整性约束语法定义