使用连接子句
https://laravel.com/docs/master/queries#joins
简单示例
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->where('users.id', '=', 100)
->get();
您也可以使用左连接子句。
更新:
$yourQuery = \DB::table('answers')
->join('questions', 'questions.id', '=', 'answers.question_id')
->join('users', 'users.id', '=', 'answers.user_id')
->leftJoin('upvote_answers', 'upvote_answers.answer_id', '=', 'answers.id')
->where('questions.question_active', '=', '1')
->where('answers.answer_active', '=', '1')
->selectRaw('answers.answer_content as answer_content,
answers.id as answer_id,
answers.created_at as created_at,
answers.created_at as answer_upvote,
answers.created_at as answer_downvote,
questions.id as question_id,
questions.question_title as question_title,
questions.question_slug as question_slug,
users.id as user_id,
users.name as user_name,
users.user_slug as user_slug,
upvote_answers.upvote as upvote');
echo $yourQuery->toSql(); //generated sql query as string
//$yourQuery->get(); //for get data from db
结果:
选择 answers.answer_content 作为 answer_content,answers.id 作为
answer_id,answers.created_at 作为 created_at,answers.created_at 作为
answer_upvote,answers.created_at 作为 answer_downvote, questions.id 作为
question_id, questions.question_title 作为 question_title,
questions.question_slug 作为 question_slug,users.id 作为 user_id,
users.name 作为 user_name,users.user_slug 作为 user_slug,
upvote_answers.upvote 作为对答案内部连接问题的支持
questions.id = answers.question_id 在 users.id 上内部加入用户 =
answers.user_id 在 upvote_answers.answer_id 上加入 upvote_answers =
answers.id 在哪里 questions.question_active = ?和
answers.answer_active = ?
如果你需要upvote_answers.user_id = '2'在leftJoin必须使用提前左连接:
->leftJoin('upvote_answers', function($advancedLeftJoin){
$advancedLeftJoin->on('users.id', '=', 'contacts.user_id')
->where('upvote_answers.user_id', '=', 2);
})
最后,你的例子的答案是:
$yourQuery = \DB::table('answers')
->join('questions', 'questions.id', '=', 'answers.question_id')
->join('users', 'users.id', '=', 'answers.user_id')
->leftJoin('upvote_answers', function($advancedLeftJoin){
$advancedLeftJoin->on('users.id', '=', 'contacts.user_id')
->where('upvote_answers.user_id', '=', 2);
})
->where('questions.question_active', '=', '1')
->where('answers.answer_active', '=', '1')
->selectRaw('answers.answer_content as answer_content,
answers.id as answer_id,
answers.created_at as created_at,
answers.created_at as answer_upvote,
answers.created_at as answer_downvote,
questions.id as question_id,
questions.question_title as question_title,
questions.question_slug as question_slug,
users.id as user_id,
users.name as user_name,
users.user_slug as user_slug,
upvote_answers.upvote as upvote');
echo $yourQuery->toSql(); //generated sql query as string
//dd($yourQuery->get()); //result as collection
结果:
选择 answers.answer_content 作为 answer_content,answers.id 作为
answer_id,answers.created_at 作为 created_at,answers.created_at 作为
answer_upvote,answers.created_at 作为 answer_downvote, questions.id 作为
question_id, questions.question_title 作为 question_title,
questions.question_slug 作为 question_slug,users.id 作为 user_id,
users.name 作为 user_name,users.user_slug 作为 user_slug,
upvote_answers.upvote 作为对答案内部连接问题的支持
questions.id = answers.question_id 在 users.id 上内部加入用户 =
answers.user_id 在 users.id 上离开加入 upvote_answers =
Contacts.user_id 和 upvote_answers.user_id = ?在哪里
问题.question_active = ?和 answers.answer_active = ?
?值绑定后使用->get()