我有一個需要進一步過濾的資料庫查詢。id 需要匹配我擁有的陣列中的數字。出于某種原因,我可以選擇where使用除 id 之外的每一列。即使是簡單到$query->where('users.id', 1);行不通的事情。如何通過 id 執行資料庫查詢?
$portfolio_query_array = UserPortfolio::all()->pluck('user_id')
$query = DB::table('users');
$query->select('users.id as user_id','users.user_slug', 'users.social_id', 'users.social_img_update_status', 'users.avatar', 'users.first_name', 'users.last_name', 'users.bio', 'comments.rating', 'user_portfolios.title', 'user_portfolios.description', 'user_portfolios.filepath');
$query->leftjoin('comments', 'comments.comment_to', '=', 'users.id');
$query->leftjoin('user_portfolios', 'user_portfolios.user_id', '=', 'users.id');
$query->leftjoin('user_profile_category_selects', 'user_profile_category_selects.user_id', '=', 'users.id');
$query->where('users.status', 1);
$query->where('users.user_type', 3);
// The below simple query line doesn't work
$query->where('users.id', 1);
// The lines I do want to work also fail.
foreach ($portfolio_query_array as $user_id){
$query = $query $query->where('users.id', $user_id);
}
謝謝您的幫助!
uj5u.com熱心網友回復:
首先,您應該利用 Eloquent ORM,除非您遇到一些性能問題或非常復雜的查詢,否則無需使用原始查詢。假設您定義了 3 個模型、、、User和所有關系UserPortfolio,Comment您可以執行以下簡單操作:
$users = User::with('comments', 'portfolio')
->where('status', 1)
->where('user_type', 3)
->whereHas('portfolio')
->get();
通過這種方式,您可以讓所有用戶擁有我認為您想要的投資組合。
無論如何,如果您堅持使用原始查詢,whereIn()那么您需要的方法就是
$portfolio_query_array = UserPortfolio::pluck('user_id')->toArray();
$query = DB::table('users')
->select(
'users.id as user_id',
'users.user_slug',
'users.social_id',
'users.social_img_update_status',
'users.avatar',
'users.first_name',
'users.last_name',
'users.bio',
'comments.rating',
'user_portfolios.title',
'user_portfolios.description',
'user_portfolios.filepath'
)
->leftjoin('comments', 'comments.comment_to', 'users.id')
->leftjoin('user_portfolios', 'user_portfolios.user_id', 'users.id')
->leftjoin('user_profile_category_selects', 'user_profile_category_selects.user_id', 'users.id')
->where('users.status', 1)
->where('users.user_type', 3)
->whereIn('users.id', $portfolio_query_array)
->get();
leftJoin順便說一句,user_profile_category_selects如果沒有從該表中選擇任何欄位,您為什么要這樣做?
此外,如果您正在尋找所有擁有投資組合的用戶,從整個投資組合串列開始,加入投資組合并只獲取那些擁有投資組合的用戶不是更好嗎?
$query = DB::table('users')
->select(
'users.id as user_id',
'users.user_slug',
'users.social_id',
'users.social_img_update_status',
'users.avatar',
'users.first_name',
'users.last_name',
'users.bio',
'comments.rating',
'user_portfolios.title',
'user_portfolios.description',
'user_portfolios.filepath'
)
->leftjoin('comments', 'comments.comment_to', 'users.id')
->join('user_portfolios', 'user_portfolios.user_id', 'users.id')
->leftjoin('user_profile_category_selects', 'user_profile_category_selects.user_id', 'users.id')
->where('users.status', 1)
->where('users.user_type', 3)
->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/419155.html
標籤:
