2015-10-26 2 views
1

У меня есть две таблицы электронной почты (email_id, электронная почта) и пользователей (user_id) с сводной таблицей user_email (id, user_id, email_id), и я хотел бы проверить наличие моей электронной почты "toto @ toto.com "для моего user_id" 2 ".Объедините два запроса в один, используя laravel

$emailID = Email::where('email', '[email protected]')->pluck('id'); 
$exists = User::find('2')->emails->contains($emailID); 

Результат хорошо, но я хотел бы знать, если это возможно совместить это в одном запросе с помощью красноречивых.

Если эти модели:

class Email extends Model { 
    public function users() { 
     return $this->belongsToMany('App\User', 'user_email'); 
    } 
} 

class User extends Model { 
    public function emails() { 
     return $this->belongsToMany('App\Email', 'user_email'); 
    } 
} 

ответ

1

Вы можете сделать запрос с отношениями тоже:

$email_address = '[email protected]'; 
$user_id = 2; 

$email = Email::whereHas('users', function($q) use ($user_id) { 
    $q->where('users.id', $user_id); 
})->where('email', $email_address)->first(); 

if($email->exists) { 
    //... it exists 
} 
1

Да, вы можете сделать это, как это.

public function getUserById($id) { 
    $user = User::with('emails')->where('id', 2)->first(); 

    return view('your-view')->with('user', $user); 
} 

Затем на вашем шаблоне лезвия.

@foreach ($user->emails as $email) 
    {{ $email->email }}<br/> 
@endforeach 

Для получения дополнительной информации ознакомьтесь с документацией Eager Loading.

Смежные вопросы