首页 > 解决方案 > 没有关系的表的 Laravel Eloquent 关系问题

问题描述

我,有口才关系的问题。这是我的数据库

https://i.stack.imgur.com/2we4g.jpg https://i.stack.imgur.com/20KeG.jpg

我在合作伙伴表的桑坦德列中有桑坦德 ID,并且想使用这两个表中的数据,例如一个

这是我的 Partner.php 模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Partner extends Model
{
    use HasFactory;



    protected $table='partner';
    protected $connection='mysql2';

    protected $guarded = [];


    public $primaryKey = 'id';


    public function santander()
    {
        return $this->hasOne(Santander::class, 'id', 'santander');
    }


}

这是我的 Santander.php 模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Santander extends Model
{
    use HasFactory;



    protected $table='santander';
    protected $connection='mysql2';

    protected $guarded = [];

   
    public $primaryKey = 'id';



    public function partner()
    {
        return $this->belongsTo(Partner::class, 'id', 'santander');
    }

}

在控制器中,我使用这样的 Eloquent 集合:

 use App\Models\Partner;
 use App\Models\Santander;

 $partners = Partner::paginate(10);

在视野中。我这样使用它:

@foreach partners as partner
    {{  $partner->santander->operator }}
@endforeach

但它会产生错误:

试图获得非对象的属性“桑坦德”

标签: phplaraveleloquentormeloquent-relationship

解决方案


首先,您确定关系本身吗?
$this->hasOne(Santander::class, 'id', 'santander');

第一个额外参数应该是外键,所以假设模型中的相关列Santander被命名santander,那么它应该是:(
$this->hasOne(Santander::class, 'santander', 'id');
指定id为最后一个参数可以省略顺便说一句)

另一个模型中的关系也是如此。


推荐阅读