Является ли объект Обратное отношение то же самое с оригиналом? - PullRequest
0 голосов
/ 23 сентября 2019

Я использую Laravel в течение нескольких месяцев, и inverse ralation беспокоит меня.

Рассматривая следующий пример.

Существует две модели Eloquent, иотношение определяется следующим образом:

class Customer extends \Illuminate\Database\Eloquent\Model
{
    public function orders()
    {
        return $this->hasMany(Order:class);
    }
}


class Order extends \Illuminate\Database\Eloquent\Model
{
    public function customer()
    {
        return $this->belongsTo(Customer:class);
    }
}


$customer1 = Customer::select()
    //->where('id', '=', 1)
    ->with('orders')
    ->first();

$customer2 = $customer1->orders[0]->customer;

if ($customer1 === $customer2) {
    echo 'Same'. PHP_EOL;
} else {
    echo 'Not the same'. PHP_EOL;
}

$customer1 и $customer2 должны быть одинаковыми.Но это не так.Я хочу, чтобы $customer1 и $customer2 были одинаковыми, как Yii2 does

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

Я что-то пропустил?Любая помощь будет благодарна.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Laravel не имеет активной записи реализации.Нет мастера, который бы отслеживал, какие объекты были извлечены из базы данных.Каждый объект отслеживает свои собственные изменения, но не знает о других объектах, которые существуют в памяти.

0 голосов
/ 23 сентября 2019

Из ваших отношений видно, что каждый клиент может иметь несколько заказов, и заказ должен иметь клиента.Таким образом, в вашей переменной $ customer1 у вас есть красноречивый объект модели, а в $ customer2 у вас есть идентификатор.Как вы могли бы сравнить их?Попробуйте сравнить между ID.Laravel не работает так, как вы ожидаете.

  $customer1 = Customer::select()
        //->where('id', '=', 1)
        ->with('orders')
        ->first();

    $customer2 = $customer->orders[0]->customer;

    if ($customer1->id === $customer2) {
        echo 'Same'. PHP_EOL;
    } else {
        echo 'Not the same'. PHP_EOL;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...