2013-07-20 1 views
1

Исходя из ORM CodeIgniter's Datamapper ORM Я все еще пытаюсь развестись вокруг Eloquent ORM от Laravel.Как запросить отношения в Laravel 4 с Eloquent?

Учитывая тот факт, что у меня есть учетная запись и USER таблицы (упрощенный):

ACCOUNT 
- id 
- name 

USER 
- id 
- account_id 
- username 

Один счет имеет много пользователей. Один пользователь принадлежит к одной учетной записи. Поэтому мы имеем дело с отношениями «один ко многим». Все уже настроено в моделях.

В DataMapper CodeIgniter, я бы сделал следующее, чтобы получить пользователю из любого идентификатора и в то же время проверки, если пользователь связан с текущего счета:

$u = new User(); 
$u->where('username', $username); 
$u->where_related_account('id', $account_id); 
$u->get(); 

if (! $u->exists()) exit; // or do something... 

// otherwise continue to use the "$u" user object 

Этот синтаксис очень логично и Легко понять. В Eloquent у меня есть трудное время, чтобы добиться того же с помощью простого легкого синтаксиса. У кого-нибудь есть предложения?

ответ

2

Очень просто (не обращая внимания на отношения между пользователем и счетами), это может быть просто:

$u = User::where('username', $username) 
     ->where('account_id', $id) 
     ->get(); 

Это вернет вам деталь вашего пользователя.

В противном случае, при условии, что у вас есть пользователей и данные классы и таблицы БД настроены правильно (as per the Laravel docs), вы должны быть в состоянии просто сделать:

$user_exists = Account::find($account_id) 
         ->users() 
         ->where("username", "=", $username) 
         ->first() 
         ->exists; 

if ($user_exists) 
{ 
    doThings(); 
} 
0

Если вы правильно настроить свои модели и таблицы базы данных (как это @msturdy сказал), вы должны действительно быть в состоянии вернуть учетную запись пользователя, просто собирается:

$user = User::whereUsername($username) 
      ->first(); // or User::where('username', $username)->first(); 
if ($user) { 
    $account = $user->accounts() 
         ->whereId($account_id) 
         ->first(); // or $user->accounts()->where('id', $account_id)->first(); 
} 

Это дает возможность доступа к модели пользователей и учетных записей

вы могли бы даже расширить User модель, чтобы включать в себя следующие методы:

class User extends Eloquent { 

    ... 

    public static function byUsername($username) { 
     return static::whereUsername($username)->first(); 
    } 

    public function getAccount($id) { 
     return $this->accounts()->whereId($id)->first(); 
    } 

    ... 

} 

, а затем просто идти

$user = User::byUsername($username); 
if ($user) { 
    $account = $user->getAccount($account_id); 
} 

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

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

  • Нет связанных вопросов^_^