Как получить платежный адрес из модели Eloquent с помощью оператора where? - PullRequest
0 голосов
/ 24 февраля 2020

Например, я могу использовать:

$address = $user->address

, который будет возвращать адреса для пользователя.

// Пользователь. php (модель)

public function address()
{
    return $this->hasMany(Address::class, 'refer_id', 'id');
}
public function billingAddress()
{
    return $this->address()
        ->where('type', '=', 1)
        ->where('refer_id', '=', $this->id)
        ->first();
}

Однако я хотел бы вернуть BillingAddress для пользователя в зависимости от этого предложения where. Как мне это сделать?

РЕДАКТИРОВАТЬ: Если я использую это внутри ... OrderController@index он вернется правильно

        $orders = Order::with('order_fulfillment', 'cart.product', 'user.address', 'payment')->get();
        return new OrderResource($orders);

Однако, если я изменю его на :

        $orders = Order::with('order_fulfillment', 'cart.product', 'user.billingAddress', 'payment')->get();
        return new OrderResource($orders);

Я получаю эту ошибку:
Symfony \ Component \ Debug \ Exception \ FatalThrowableError Вызов функции-члена addEagerConstraints () для null

1 Ответ

1 голос
/ 24 февраля 2020

Один из вариантов - вы можете использовать whereHas в своем запросе. Например,

$orders = Order::with('order_fulfillment', 'cart.product', 'user.address', 'payment')
->whereHas(
 'address', function ($query) {
   $query->where('type', '=', 1)
    ->first();
 }
)->get();
    return new OrderResource($orders);

Это один из вариантов. попробуйте dd($orders) найти, если она работает.

У вас был другой вариант, подобный этому, в вашей модели

public function address()
{
   return $this->hasMany(Address::class, 'refer_id', 'id');
}

Добавить отношения типа

public function billingAddress()
{
   return $this->hasOne(Address::class, 'refer_id', 'id')->where('type', 1);
}

И

 public function shippingAddress()
{
   return $this->hasOne(Address::class, 'refer_id', 'id')->where('type', 2);
}

Тогда в вашем запросе

$orders = Order::with('order_fulfillment', 'cart.product', 'user.address','user.billingAddress', 'user.shippingAddress', 'payment')->get(); return new OrderResource($orders);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...