遇到一個問題,就是
articles
和article_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'); }
二. 獲取某個使用者的評論列表
採用關聯模型with (一對多)
// 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
時,一定要寫兩個表的關聯欄位,不然是查不到關聯關係的。
本作品採用《CC 協議》,轉載必須註明作者和本文連結