如何将参数传递到链式 Laravel Eloquent 关系中的位置

Posted

技术标签:

【中文标题】如何将参数传递到链式 Laravel Eloquent 关系中的位置【英文标题】:How to pass a parameter to where in chained Laravel Eloquent relationship 【发布时间】:2019-12-03 10:58:04 【问题描述】:

在向关系添加 where 子句时,我无法在 Laravel 中链接多个关系:

用户模型:与用户配置文件的一对多关系

列:id、用户名、电子邮件、current_region

class User

 public function profile()
    
        return $this->hasOne(Profile::class)->where('region_code',$this->current_region);

    

注意:在这种情况下,我使用 hasOne 来获取单个记录,而关系是 oneToMany

用户档案模型:

列:名称、编号、user_id、region_code

附件模型:

列:文件、名称、user_id、region_code

class Attachment

 public function owner()
    
        return $this->belongsTo('App\User', 'user_id');
    



我需要从附件模型访问 userProfle。

attachment->user->userprofile; // returns null because $this->current_region is not accessible as the context for user model is not available yet

但是我可以直接从用户模型访问 userProfile

$user->userProfile // return expected response;

如何将参数从附件模型传递给用户模型,或者有更好的方法来解决这个问题。

【问题讨论】:

【参考方案1】:

您需要按照here 的描述显式加载嵌套关系

$attachments = App\attachment::with('owner.profile')->get();

那么您应该可以像这样访问个人资料

$profile = $attachment->owner->profile;

【讨论】:

以上是关于如何将参数传递到链式 Laravel Eloquent 关系中的位置的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 将 url 参数从控制器传递到路由

Laravel:如何隐藏 url 参数?

Laravel 将参数从路由传递到过滤器

如何将链式作业分派到 Lumen 6 中的队列?

如何将数组作为 Laravel 查询生成器的 SELECT 参数传递

如何将 null 参数从播种机传递给 Laravel 工厂?