php 尝试读取int - Laravel 8上的属性“email”

du7egjpx  于 2023-01-24  发布在  PHP
关注(0)|答案(4)|浏览(158)

我有一个工作模型,其中一个属性是请求者,我试图获取请求者的数据(我已经可以获取主键了)。
这样,我称之为视图:

$obras = Obra::all();
    return view("obra.index", compact("obras"));

该视图:

@forelse ($obras as $i)
        <li>{{ $i->requestor_id->email }}</li>
    @empty

工作模型中的关系:

public function requestor_id(){
    
    return $this->hasOne(User::class);
    }

表格:
用户(申请人)具有:ID、姓名、电子邮件、密码等。
工作有:ID、用户ID、开始日期等。

kx7yvsdv

kx7yvsdv1#

我认为这是因为关系的名称。你可以尝试将它重命名为requestor。Laravel有一些内部行为运行在下划线上。它可能只返回id。

public function requestor()
{    
    return $this->hasOne(User::class);
}
w80xi6nr

w80xi6nr2#

问题似乎是我把关系搞错了,我不得不在请求者模型中使用hasOne(最后我使用hasMany,因为有人可以创建多个工作),而在工作模型中使用belongsTo

重要注意:模型中的函数名不能与表中的字段名相同。另外,在我的例子中,列名不遵循laravel/eleoent命名法,因此另一个参数与字段名一起添加到belongsTo中。

工作模式:

public function solicitante(){
    return $this->belongsTo(User::class, "requestor_id");
}

申请人型号:

public function obra(){
   return $this->hasMany(Obra::class, "requestor_id");
}

以及如何获取请求者数据:$obra->solicitante->email

jljoyd4f

jljoyd4f3#

在控制器中导入use App\Models\Obra;

use App\Models\Obra;

$obras = Obra::all();
return view("obra.index", compact("obras"));
hyrbngr7

hyrbngr74#

返回的函数必须与表名相同,例如:

public function obra(){
   return $this->hasMany(Obra::class, "requestor_id");
}

表名必须为obra

相关问题