Обрабатывается метод ownTo (), который возвращает ноль - PullRequest
0 голосов
/ 07 октября 2018

У меня есть модель (запрос), которая возвращает базу объектов клиента по его идентификатору, она получает идентификатор с другого компьютера, поэтому я хочу обработать несуществующие значения (т. Е. Идентификатор, который не существует, возвращая eloquent как ноль).

так для:

public function customer()
{
    return $this->belongsTo('App\Customer', 'site_user');
}

Я пробовал следующее:

public function getSiteUserAttribute()
{
    if (!$this->relationLoaded('customer')) {
        $this->load('customer');
    }

    return $this->getRelation('customer') ?: $this->nullCustomer();
}

и nullCustomer():

private function nullCustomer()
{
    $nonExist = 'non-exist-customer';

    $siteUser = new \Illuminate\Support\Collection;
    $siteUser->first_name = $nonExist;
    $siteUser->last_name = $nonExist;
    $siteUser->email = $nonExist;

    return $siteUser;
}

ПокаLaravel возвращает ошибку, которую я не могу понять:

Undefined property: App\Request::$site_user (View: /../../index.blade.php)`

она явно связана с getSiteUserAttribute(), которая экстраполирует site_user, но я не могу понять, в чем проблема.

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

Просто повторюсь, я пытаюсьне обрабатывать нуль belongsTo(), который не нарушил бы представление.

Ответы [ 3 ]

0 голосов
/ 07 октября 2018

Кажется, что поле site_user и атрибут site_user смешаны.

Самый простой способ избавиться от путаницы, переименовать поле как site_user_id

0 голосов
/ 07 октября 2018

Как сказал Мурат Тутумлу, вы не можете одновременно иметь атрибут site_user и аксессор getSiteUserAttribute().

Можно указать значения по умолчанию с помощью withDefault():

public function customer()
{
    return $this->belongsTo('App\Customer', 'site_user')
        ->withDefault([
            'first_name' => 'non-exist-customer',
            'last_name' => 'non-exist-customer',
            'email' => 'non-exist-customer'
        ]);
}
0 голосов
/ 07 октября 2018

Переписать nullCustomer(), чтобы вернуть App\Customer, а не \Illuminate\Support\Collection: хотя я не проверял его.

private function nullCustomer()
{
    $nonExist = 'non-exist-customer';

    $siteUser = new \App\Customer;
    $siteUser->first_name = $nonExist;
    $siteUser->last_name = $nonExist;
    $siteUser->email = $nonExist;

    return $siteUser;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...