2014-09-18 4 views
1

Я новичок в laravel и создаю основное приложение, чтобы получить доступ к отношениям. Я реализовал отношения один к одному и хочу получить конкретные столбцы как из базовой таблицы, так и из соответствующей таблицы .I есть две таблицы именно пользователей и identity_cards.Relationship определяется следующимПолучение конкретных столбцов с активной загрузкой laravel 4

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    //protected $hidden = array('password', 'remember_token'); 

    protected $fillable = array('first_name','last_name','email','created_at','updated_at'); 

    public function identity_cards() 
    { 
     return $this->hasOne('IdentityCard'); 
    } 
} 


class IdentityCard extends Eloquent { 

    protected $table = 'identity_cards'; 
    protected $fillable = array('issuance_date','expiry_date','issuance_location','user_id'); 
    public $timestamps = false; 

    public function user() 
    { 
     return $this->belongsTo('User'); 
    } 
} 

все отлично работает, когда я пытаюсь получить все столбцы

$users = User::with('identity_cards')->get()->toArray(); 

Но когда я пытаюсь получить конкретные столбцы либо или обе таблицы, я получил пустой массив снова т запись для таблицы удостоверения личности

$users = User::with(array('identity_cards'),function($query) { 
       $query->select('issuance_location'); //getting specific column from identity card table 
       } 
     )->get(array("first_name"))->toArray(); 

Результата против вышеуказанного заявления выглядит следующим образом: -

Array 
(
    [0] => Array 
    (
     [first_name] => User1 
     [identity_cards] => 
    ) 

    [1] => Array 
    (
     [first_name] => User2 
     [identity_cards] => 
    ) 

    [2] => Array 
    (
     [first_name] => User3 
     [identity_cards] => 
    ) 

) 

Это может быть достигнуто с помощью конструктора запросов, но я хочу, чтобы решение с eloquent.Why я получаю пустой массив для моей связанной таблицы, даже если у меня есть данные в нем. Как определить конкретные столбцы, используя загружаемую загрузку?

ответ

7

1 Вы должны всегда выбирать primary key родителя и foreign key ребенка отношения, иначе Eloquent не сможет сопоставить связанные модели.

2 Закрытия передается нетерпеливой загрузкой является значением массива, а не второй параметром with функции:

User::with(array('identity_cards' => function($query) { 
      $query->select('issuance_location', 'user_id'); 
     }))->get(array('first_name', 'id'))->toArray(); 

3 Я бы переименовывать, что отношение к identity_card, ибо это hasOne - это будет проще работайте с.

+0

Идеально !!! Ваше решение сработало для меня. Спасибо за вашу помощь :) – developer34

+0

Отметьте это как правильный ответ, тогда, если у кого-то другая проблема. –

0

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

public function identity_cards_limited() 
    { 
     return $this->hasOne('IdentityCard')->select('desired_column'); 
    } 
+0

Я видел эту опцию, но это ограничит мою область, когда я хочу получить один набор столбцов для одного запроса и другой набор для другого запроса. Например, в одном scenerio мне нужен идентификатор и дата истечения срока действия карты и в другом scencio , мне нужна только дата выпуска. Для таблицы с большим количеством столбцов это будет накладные расходы, чтобы указать многие имена столбцов. Но да, это тоже хороший вариант :). Спасибо за вашу помощь :) – developer34

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