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

问题描述 投票:0回答:5

我有一个工作模型,其中一个属性是请求者,我正在尝试获取请求者的数据(我已经可以获得主键)。

这样我调用视图:

    $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、user_id、start_date 等

php laravel eloquent laravel-8 eloquent-relationship
5个回答
2
投票

问题似乎是我的关系错误,我必须在请求者模型中使用

hasOne
(最后我使用
hasMany
,因为有人可以创建多个作品)并在工作模型中使用
belongsTo 
.

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

belongsTo
中。

工作模式:

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

请求者型号:

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

以及如何获取请求者数据:

$obra->solicitante->email


1
投票

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

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

0
投票

在控制器中导入

use App\Models\Obra;

use App\Models\Obra;

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

0
投票

返回的函数必须与表名相同 exm:

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

表名必须是obra


0
投票

$obra->solicitante->email 而不是使用正确的形式 $obra->solicitante=email 因为它无效

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.