使用 Eloquent ORM 使用 with 模型关联查询,如何处理select不同模型的字段(字段名可能相同)

遇到一个问题,就是articlesarticle_comments两个数据模型
现在要查出来某个用户的评论列表(列表包含 评论内容article_comments.content、评论时间article_comments.created_at、评论所属的文章articles.title)。
我首先需要根据article_comments中的user_id查询出来对应的评论列表,然后根据评论列表中的article_id,然后找到对应文章标题。

一. 关联模型(一对多)

  • articles 文章模型
// 核心方法
public function comments()
{
  return $this->hasMany('App\Models\ArticleComment')->orderBy('id', 'desc');
}
  • article_comments 评论模型
// 核心方法
public function article()
{
	return $this->belongsTo('App\Models\Article');
}

二. 获取某个用户的评论列表

// DB操作,主要是想打印一下sql
use Illuminate\Support\Facades\DB;

 public function comments($id)
 {
	 $user = \App\User::find($id);
	 if(empty($user)) {
		 echo '用户不存在';
		 exit;
	 }

	DB::connection()->enableQueryLog(); // 开启查询日志
    
	$commentList = ArticleComment::with(['article'=>function($query){
	     // 采用闭包进行处理,select出来想要的字段,但是必须包含关联外键 id
	     return $query->select('title as article_title', 'id');
	}])
	->where('user_id', $id)
	// 这里select出来评论模型的字段,但是也必须要包含外键 article_id
	->select('content', 'created_at','user_id','id','article_id')
	->orderBy('id','desc')
	->get();

    // 这个地方可以打印sql,挺不错的,记录一下
	foreach (DB::getQueryLog() as $sql) {
	    dump($sql['query']);
	}

	dd($commentList);
	exit;
}

最后注意:如果想要指定字段,使用 select 时,一定要写两个表的关联字段,不然是查不到关联关系的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值