【问题标题】:Laravel 5.7 Eloquent Relation for listingLaravel 5.7 Eloquent Relation 上市
【发布时间】:2019-01-03 00:50:41
【问题描述】:

我正在尝试通过连接获取数据集,并且我想使用 eloquent 自动完成,无需手动查询。我也做了关系,但是当我尝试列出加入的数据时,不知何故它以相反的方式做到了。

Laravel 5.7 版 MySQL数据库

已更新,添加了数据库架构。 my_tab3s 表:

mytab1 表:

错误:

"SQLSTATE[42S22]: 未找到列:1054 未知列 'where 子句'中的'myTab1.my_tab3_id'(SQL:select * from myTab1 其中myTab1.my_tab3_id in (1, 2))"

myTab3.php

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class myTab3 extends Model
{
    //
    protected $table = 'my_tab3s';
    public $timestamps = true;


    protected $fillable = [
    'coolField',
    'muhCurrentDate',
    'rast',
    'myTab1_id'
  ];


    public function myTab1(){
        return $this->hasOne('App\myTab1');
    }
}

myTab1.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class myTab1 extends Model
{
    //
    public function scopeBigger($query){
        return $query->where('id','>','1');
    }
    public function scopeHasLetterZ($query){
        return $query->where('someField','like','%z%');
    }

    public function gimmeAll(){
        return myTab1::All();
    }
    protected $table = 'myTab1';
    public $timestamps = true;

    protected $fillable = [
    'someField'
  ];


    public function myTab3(){
        return $this->belongsTo('App\myTab3');
    }
}

myTab3Controller.php INDEX 方法

 public function index()
    {

        /*$dataSet = myTab3::All();*/
        //$dataSet->myTab1()->get();
        $dataSet = myTab3::with('myTab1')->get();
        return view('myTab3.index',compact('dataSet'));
    }

查看部分

@foreach($dataSet as $data)
        <tr>
            <td>{{$data->id}}</td>
            <td>{{$data->coolField}}</td>
            <td>{{$data->muhCurrentDate}}</td>
            <td>{{$data->created_at}}</td>
            <td>{{$data->updated_at}}</td>
            <td>{{$data->rast}}</td>
            <td>{{$data->myTab1->someField}}</td>
        </tr>
        @endforeach

【问题讨论】:

  • myTab1 上的列是什么?
  • 表列已添加

标签: php mysql laravel eloquent eloquent-relationship


【解决方案1】:

没有数据库很难说,但我认为你颠倒了你的关系,它应该是 belongsTo 对应 myTab3hasOne 对应 myTab1

编辑:

尝试:

public function myTab1(){
    return $this->belongsTo('App\myTab1', 'myTab1_id');
}

【讨论】:

  • 几乎工作了,但现在我得到“尝试获取非对象的属性'someField'”错误。是因为我使用 {{$data->myTab1->someField}} 吗?
  • @Skywarth,尝试dd($data)并检查是否为所有对象定义了myTab3,否则您需要在{{printing}}之前检查myTab3字段是否为空他们。
  • @Louis R 然后,它返回给我这样的结果集: {"id":2,"coolField":"rtryrtyrtyty","muhCurrentDate":"2019-01-03 00 :12:19","created_at":"2019-01-03 00:12:19","updated_at":"2019-01-03 00:12:19","rast":3,"myTab1_id": 3,"my_tab1":null}] 表示关系不是通过查看空值来完成的。
  • @Louis R,是的,似乎很神奇,返回行中的一行是这样的: {"id":2,"coolField":"rtryrtyrtyty","muhCurrentDate" :"2019-01-03 00:12:19","created_at":"2019-01-03 00:12:19","updated_at":"2019-01-03 00:12:19","rast ":3,"myTab1_id":3,"my_tab1":{"id":3,"someField":"zuhahahaha","updated_at":"2019-01-02 04:00:15","created_at": "2019-01-02 04:00:15"}}] 但问题是,我怎样才能获得列表的值(在 foreach 中)?
  • 好的,想出了如何列出。感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 2019-04-20
  • 2020-04-22
  • 2019-05-22
  • 2019-04-20
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多