我想知道这是否是格式良好的链式查询。
$users = Comment::first()->fromWebsite(2)->first()->ofUser(1)->first()->user()->first();
这是有效的,但看起来不是一段很好的代码。它可以以某种方式转变为更漂亮或更清洁的版本吗?我知道它可以有多个新行。这是我的Comment.php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
public function website(){
return $this->belongsTo('App\Website');
}
public function fromWebsite($websiteId){
return $this->where('website_id', $websiteId);
}
public function ofUser($userId){
return $this->where('user_id', $userId);
}
}
正如您所看到的,我正在尝试获取第一个用户在网站#2上发表评论并拥有user_id#1的数据,我可以使用更干净的代码吗?
答案 0 :(得分:2)
正如您所看到的,我正在尝试获取在网站#2上发表评论的第一位用户的数据,并且具有user_id#1。
如果这是你的问题,你可以将所有内容都放在一个电话中:
Comment::where('website_id', 2)->where('user_id', 1)->first();
如果你想让它更干净,你应该写一个query scope,例如
function scopeFromUserForWebsite($query, $user_id, $website_id) {
return $query->where('website_id', $user_id)->where('user_id', $website_id);
}
有了这个,你可以简单地使用以下内容:
Comment::fromUserForWebsite(1,2)->first();