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

时间:2019-04-06 20:52:10

标签: php database laravel laravel-5 foreign-keys

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

}

3 个答案:

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