Как в модели Belongsto обратиться по нескольким полям?

В Laravel, при использовании отношения belongsTo в модели, обращение по нескольким полям можно осуществить с помощью метода where в связи с использованием анонимных функций.

Предположим, у вас есть две модели: User и Address. Связь между ними - один к одному, где у пользователя есть несколько адресов, и для каждого адреса указывается main_city и street.

Чтобы обратиться к модели User по двум полям (main_city и street) модели Address, вы можете сделать следующее:

class Address extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class, function ($query) {
            $query->where('main_city', $this->main_city)
            ->where('street', $this->street);
        });
    }
}

Таким образом, при обращении к связи user у модели Address, Laravel будет выполнять запрос, чтобы найти пользователя, у которого поле main_city соответствует значению main_city в модели Address, и поле street соответствует значению street в модели Address.

Не забудьте также добавить обратное отношение в модель User для связи:

class User extends Model
{
    public function address()
    {
        return $this->hasOne(Address::class);
    }
}

Таким образом, вы можете обратиться к модели User по нескольким полям модели Address с использованием отношения belongsTo и метода where в Laravel.