Я пытаюсь повторить объединение, как это, используя конструктор Laravel запросов:Laravel 4 Eloquent Query Builder - Сложное соединяется с переменной
LEFT JOIN content_userdata
ON content_id = content.id
AND user_id = $user_id
я обнаружил, что я могу сделать дополнительные «дополнения», используя следующие функция в моей модели, которая расширяет Eloquent
public function scopeJoinUserData($query, $user_id)
{
return $query->leftJoin('content_userdata', function($join)
{
$join->on('content_userdata_content_id', '=', 'content.content_id')->on('content_userdata_user_id', '=', 10);
});
}
Но это создает две проблемы. Во-первых, я не могу получить переменную $ user_id в функции, а во-вторых, даже если я жестко задал ее для целей тестирования, как я сделал выше (до int «10»), Laravel заключает ее в «означает, что он интерпретируется как имя столбца, когда он должен t t, так:
left join `content_userdata`
on `content_id` = `content`.`id`
and `user_id` = `10`
Итак, у меня есть две проблемы.
- Я не могу получить $ user_id в функцию присоединения при использовании запроса прицелов
- Даже если бы я мог, я не могу послать переменное объединение, поскольку она всегда интерпретирует его как имя столбца
Зачем мне это делать? Я понимаю, что один ответ может состоять в том, чтобы поместить его в место. Однако я пытаюсь сделать это таким образом, так как объединение может не обязательно возвращать какие-либо результаты (следовательно, левое объединение), так как таблица content_userdata содержит такие вещи, как рейтинг пользователей для части контента. Если я использую a, а затем результаты, которые ничего в таблице content_userdata не будут возвращены, где, как если бы я мог поместить его в соединение, они будут возвращены из-за левого соединения.
В любом случае, чтобы достичь этого в Laravel, и если нет, то какие альтернативы, очевидно, полностью меняющиеся канавы Laravel превышают вершину, но единственной альтернативой, о которой я могу думать, является получение пользовательских данных в отдельном запросе.
Вы должны изменить свой ответ так, чтобы он не вводил уязвимость SQL-инъекции. – vog