2
respostas

Somente dar select com join se existir o dado na outra tabela

Olá pessoal. Estou criando uma aplicação em Laravel e fiz o curso de MySQL no qual foi ensinado a como fazer join e etc...

Tenho essa query:

SELECT `name`, `uname`, `verified`, facebook_users.`provider_id` FROM `users` JOIN facebook_users ON facebook_users.user_id = users.id WHERE id = ?

E gostaria de puxar o dado facebook_users.provider_id apenas se conter algum registro que tenha o facebook_users.users_id com o mesmo valor que o users.id, considerando que o facebook_users.users_id e users.id são as chaves primárias das suas respectivas tabelas.

2 respostas

Qual a dúvida exatamente?

Em relação à query, está funcionando, mas da forma que foi escrita vc está forçando que exista o registro na tabela facebook_users, se esse não for o objetivo recomendo utilizar o LEFT JOIN que trará somente quando necessário.

Agora se a dúvida é de como aplicar este relacionamento no laravel vc terá que seguir os seguintes passos:

1 - Analisar o tipo de relacionamento (1 - 1, 1 - N, N - N) 2 - Criar/editar as models de users e facebook_users

Por exemplo na Model de Users:

adicione a função:

public function facebookUsers()
{
    return $this->belongsTo(FacebookUsers::class); //OU
    return $this->hasMany(FacebookUsrs::class); //mas acredito que seja a forma anterior que esteja usando
}

Quando você fizer o select o laravel se encarregará de trazer os dados do relacionamento.

Meu código está forçando o retorno do provider_id da tabela facebook_users mas não quero que isso aconteça, já que nem sempre existirá o mesmo.

Nesse caso, você me recomenda utilizar o LEFT JOIN correto?

Citei o projeto em Laravel, mas apenas por citar...