【问题标题】:How to extract data from foreign keys in laravel? [duplicate]如何从laravel中的外键中提取数据? [复制]
【发布时间】:2019-08-28 10:53:49
【问题描述】:

我是 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>

具体...

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

【问题讨论】:

  • $section->class() 或 $class->section()
  • 当然忘记 IE 或 Edge ;)
  • 你在问什么请解释一下。
  • 这也是我的问题,你可以检查一下,我没有得到正确的答案。
  • @AbdulRehman 如果你不喜欢你在另一个问题上得到的答案,你不应该接受。

标签: php laravel eloquent foreign-keys relational-database


【解决方案1】:

这对我有用...有点长但简单

{{ \Illuminate\Support\Facades\DB::table('class')->where('id',$cat->class_id)->value('name')}}

【讨论】:

    【解决方案2】:

    试试$section-&gt;classs,它应该是一个数组,因为关系是hasMany,也许你应该创建一个过滤器来获取正确的id。

    Eloquent 有另一种方式来获取与 SQL where 子句和其他子句的关系。

    $section-&gt;classs()-&gt;where('title', 'foo')-&gt;first();


    小技巧,如果您想尝试一下。

    返回视图时,你可以在 Laravel 中使用-&gt;with() 方法,使用简洁的 php 函数进行清晰的调用和代码。

    
    return view('sections.index')->with(compact('sections', 'classs', 'users'));
    
    

    【讨论】:

    • “此集合实例上不存在属性 [类]。(查看:C:\xampp\htdocs\jurs1\resources\views\sections\index.blade.php)”
    • 检查 $section 变量是否在您的视图中改为 $cat。如果你在循环中,它就是。如果没有,请尝试 {{dd($section)}}{{dd($section-&gt;classs)}} 来检查您的 var 的当前值。
    • 我必须在哪里检查控制器或刀片中的这个 $ 部分?
    • 花括号仅在刀片模板中可用,因此如果您想在刀片中进行调试,请使用我上面评论中的代码。你也可以在你的控制器中使用 laravel 函数dd($yourVariableName)
    • 我很抱歉,我太不擅长了.. 你能按你的要求更改我的代码并告诉我这些功能是什么
    【解决方案3】:

    而不是

    {{$cat-&gt;(class_id)-&gt;name}}

    试试

    {{$cat-&gt;classs-&gt;name}}

    您正在使用$cat-&gt;(class_id) 访问sections 表中的外键,这是有效的。但是现在你想通过它的动态属性来查询关系,这需要$cat-&gt;classs-&gt;"any properties of classs"

    【讨论】:

    • 我刚改了它,它给出了这个错误。我不知道这是在说哪个专栏。 SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'classses.section_id'(SQL:select * from classses where classses.section_id = 2 和 classses.section_id 是不为空)(查看:C:\xampp\htdocs\jurs1\resources\views\sections\index.blade.php)
    • 对不起,我没有仔细检查。我相信您的数据模型不正确。外键必须在“belongsTo”模型/表中定义。因此,如果数据库表中的关系是正确的,那么只需在模型中交换“belongsTo”和“hasMany”。然后看看我之前的回答。
    • "试图获取非对象的属性'title'
    • stackoverflow.com/questions/32469542/… 同样的问题,但不明白你能否帮助我
    • 替换 'return view('sections.index')->with ...' 为 'return view('sections.index', compact('sections', 'classs', 'users' ));'
    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2020-02-16
    • 2020-04-19
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多