Laravel 4 Éloquent Générateur de Requêtes Complexes et des jointures avec la variable

Je suis en train de reproduire une jointure comme l'utilisation de la laravel générateur de requêtes:

LEFT JOIN content_userdata
ON content_id = content.id
AND user_id = $user_id

J'ai découvert que je peux faire des "on" à l'aide de la fonction suivante dans mon modèle qui s'étend Éloquent

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);
    });
}

Mais cela crée deux problèmes. Tout d'abord, je ne peut pas obtenir le $user_id variable dans la fonction et d'autre part, même si j'ai coder en dur les fins de test comme je l'ai fait ci-dessus (à l'int "10") Laravel enveloppe en ce sens qu'il est interprété comme un nom de colonne quand il ne devrait pas être, comme suit:

left join `content_userdata`
on `content_id` = `content`.`id`
and `user_id` = `10`

Alors maintenant, j'ai deux problèmes.

  1. Je ne peux pas obtenir le $user_id dans la fonction join lors de l'utilisation de requêtes étendues
  2. Même si je le pouvais, je ne peut pas envoyer une variable à la joindre depuis toujours, il l'interprète comme un nom de colonne

Pourquoi voudrais-je faire cela?
Je me rends compte qu'une seule réponse peut être de le placer dans un cas. Cependant, je suis en train de faire de cette façon que la jointure ne sont pas nécessairement renvoyer des résultats (d'où la jointure gauche), depuis le content_userdata table contient des choses comme l'un des utilisateurs de notation pour un morceau de contenu. Si j'utilise ensuite les résultats avec rien dans le content_userdata de table ne seront pas retournés, si je peux le mettre dans le rejoindre, ils seront retournés en raison de la jointure gauche.

Est-il de toute façon à atteindre dans Laravel et si non quelles sont les alternatives, de toute évidence en train de changer complètement d'amerrissage Laravel est sur le dessus, mais la seule alternative que je peux penser est d'obtenir les données de l'utilisateur dans une requête distincte.

OriginalL'auteur John Mellor | 2013-07-05