Laravel Eloquent 相当复杂的关系
Posted
技术标签:
【中文标题】Laravel Eloquent 相当复杂的关系【英文标题】:Laravel Eloquent rather complex relationship 【发布时间】:2020-01-12 14:40:30 【问题描述】:我有两个表,用户和作业。用户拥有一份工作:
来自用户模型:
public function getJobs()
return $this->belongsTo('App\Jobs','operative_id','id');
public function getIncompleteJobs()
return $this->belongsTo('App\Jobs','operative_id','id')
->where('jobStatus_id', '=', 1);
这很好,但作业在名为“status_id”的字段中具有状态(已完成、待处理等),我想进一步细化 getJobs(),使其仅返回 status_id 等于 2 的那些。
可能是我太厚了!
从 cmets 编辑:
$op = App\User::where('client_id', $us->getCompany->id)
->where('operative', 1)
->orderby('name')
->where('active', 1)
->with('getIncompleteJobs')
->get();
【问题讨论】:
您应该能够将->where('status_id', '=', 2);
附加到您的->belongsTo()
;看看这是否有效。
->where('jobStatus_id', '=', 1);
应该是status_id
?
另一件事; jobs
(getJobs()
和 getIncompleteJobs()
)表示会返回很多结果,但您只返回 1(belongsTo()
返回单个记录或null
),并且您的模型名称App\Jobs
应该是单数 Job
... 检查您的命名约定。
【参考方案1】:
您可以创建关系,然后他们以您想要的任何条件在另一种方法中调用它。
这样:
public function jobs()
return $this->belongsTo('App\Jobs','operative_id','id');
public function completedJobs()
return $this->jobs()->where('status_id', '=', 2);
【讨论】:
似乎关系总是为空。使用原始 sql 可能会更好,但 eloquent 更整洁。 不能在关系中使用->get()
,否则调用->with('completedJobs')
会返回错误。 (它需要 Builder
类,->get()
将其转换为 Collection
)
@TimLewis 我一开始忘记添加->get()
,但我后来编辑了它。不过还是谢谢你的提醒。 :)
抱歉,get 是我的错字。没有得到。
是的,如果您调用User::first()->completedJobs();
(使用()
),这将起作用,但会破坏用作属性(User::first()->completedJobs;
)或急切加载(->with("completedJobs")
)或附加条件 (User::first()->completedJobs()->where(...);
)以上是关于Laravel Eloquent 相当复杂的关系的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent 相当于 QueryBuilder 查询