Используйте пункт «Присоединиться»
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();
Также вы можете использовать предложение Left Join.
Обновление:
$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
Результат:
выберите 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 как голосование из ответов на вопросы о внутреннем соединении по вопросам. upvote_answers.answer_id = answer.id, где questions.question_active = ? и ответы.answer_active = ?
Если вам нужно upvote_answers.user_id = '2'
в левом соединении, необходимо использовать предварительное левое соединение:
->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
Результат:
выберите 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 как голосование из ответов на вопросы о внутреннем соединении по вопросам. users.id = contact.user_id и upvote_answers.user_id = ? где questions.question_active = ? и ответы.answer_active = ?
?
значение привязывается после использования ->get()
person
m3esma
schedule
10.03.2018