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

Posted

技术标签:

【中文标题】如何在 Laravel 中从外键中查看表字段【英文标题】:How to see table fields from foreign keys in Laravel 【发布时间】:2019-08-28 10:04:21 【问题描述】:

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


【问题讨论】:

请分享你的 laravel 代码,你发送这个对象的地方 我已经编辑了我的问题。希望有效。 不,请在控制器或 route.php 文件(后端)中分享您的 laravel 代码 【参考方案1】:

完全按照自己的意愿去做是很容易的。 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

【讨论】:

我试过这个,但没有用。在使用之前我必须在模型中创建关系函数吗? 不,我看到您已经发布了控制器,因此您的设置有所不同。让我编辑我的答案以反映: 是的,所有这一切都取决于让 Class 模型成为 User 模型内部的关系。如果您没有先创建关系,则不会工作。这就是我链接到文档的原因 - 这是第一步,创建关系【参考方案2】:

你必须声明你的关系。 在您的 User 模型中,

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

【讨论】:

【参考方案3】:

你要做的就是

data-myclassid="$cat->class_id"

不如试试这个

data-myclassid=" \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')"

我假设您的表名是类,因为您想显示类名,因此在该数据库中的类名(列名)将是简单的 'name' ,这就是为什么我将 name 放在 value 字段中......

【讨论】:

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

在 Laravel 6 中从外键获取数据

在 Django 中从外键设置会话变量:需要字段名而不是主键

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

Laravel中从一个表到另一个表中的同一字段的多个外键

Laravel:当我的外键在数组中时,如何在模型中添加关系?

在 laravel 中将数据从外键添加到数据库中