Как объединить возврат от одного к одному отношению - PullRequest
1 голос
/ 29 апреля 2019

Я использую отношения один к одному в Laravel. У меня есть две модели: одна пользовательская, а другая - пользовательские детали.

Отношение в модели пользователя

public function userDetails(){

    return $this->hasOne(UserDetail::class); 

}

Я называю модели как-то так

public function index()
{
     $user  = User::find(2);
     $user->user_details = $user->userDetails;
     echo "<pre>"; print_r($user->toArray()); die;
}

Но я печатаю возврат, получая так: -

Array
(
    [id] => 2
    [name] => Joney
    [email] => joney@gmail.com
    [email_verified_at] => 2019-04-29 02:01:03
    [password] => dasDSADASDASDAS
    [status] => Active
    [remember_token] => DSADASd
    [created_at] => 2019-04-29 00:00:00
    [updated_at] => 2018-09-24 02:00:00
    [user_details] => Array
        (
            [id] => 2
            [user_id] => 2
            [address] => Dhampur
            [mobile_number] => 8006009195
            [passport_number] => sasdadasd
            [zip_code] => 201301
            [created_at] => 2019-04-29 06:00:00
            [updated_at] => 2019-04-29 02:00:00
        )

)

Итак, я хочу получить возврат после слияния деталей в объект.

Спасибо

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Это произойдет автоматически, когда вы загрузите отношения. Вы можете сделать это с помощью с () или load () в зависимости от того, есть ли у вас модель.

В приведенном выше примере вы будете использовать with(), поскольку вы одновременно получаете пользователя:

$user  = User::with('userDetails')->find(2);

В качестве альтернативы, если у вас уже была модель User, вы бы использовали load():

 $user  = User::find(2);
 $user->load('userDetails');

Теперь, учитывая все вышесказанное, поскольку у вас есть только одна модель User, а не коллекция, вам не нужно беспокоиться о (n + 1) проблеме, которую решает загрузка, поэтому вы можете просто получить доступ собственность и Laravel автоматически получат информацию для вас, например:

 $user  = User::find(2);
 $user->user_details;

Теперь, если вы сделаете dd($user->toArray()), вы увидите, что информация была загружена.


Просто к сведению, вместо использования print_r() с die() и упаковки его в теги <pre>, вы можете использовать dump () и dd () helper функции вместо.

1 голос
/ 29 апреля 2019

попробуйте ниже код:

    $user  = User::with('userDetails')->find(2);
    $user->user_detail_id = $user->userDetails->id;
    $user->address = $user->userDetails->address;
    $user->mobile_number = $user->userDetails->mobile_number;
    $user->passport_number = $user->userDetails->passport_number;
    $user->zip_code = $user->userDetails->zip_code;
    unset($user->userDetails);
    echo "<pre>"; print_r($user->toArray()); die;

Спасибо.

0 голосов
/ 29 апреля 2019

Вы уже пробовали это $ user = User :: find (2)

echo print-r ($user->userDetails); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...