Eloquent withtriedhed() для мягких удалений при запросе на загрузку - Laravel 5.1

86
3

Я пытаюсь использовать withTrashed() с нетерпением загрузки. Я создал новую функцию _withtriedhed в моей модели, но запрос возвращается с NULL для моего клиента

Модель клиента:

// Client
public function client()
{
return $this->belongsTo('App\Client');
}

// Client (withtrashed for soft deletes)
public function client_withtrashed()
{
return $this->belongsTo('App\Client')->withTrashed();
}

Контроллер заказа:

/**
* Show order.
*/
public function show($id)
{
$order = Order::with('client_withtrashed') ---> it works normally with: Order::with('client') , except I don't get the soft deleted rows
->where('id', '=', $id)
->firstOrFail();

дд ($ заказать); отображает пустой клиент

#relations: array:1 [
"client_withtrashed" => null

Есть идеи? Я решил решение выше, потому что я не мог получить withTrashed() для работы с моим нетерпеливым запросом $order = Order::with('client_withtrashed')->withTrashed()

спросил(а) 2021-01-19T18:42:03+03:00 2 месяца, 3 недели назад
1
Решение
114

Ну, вы не можете определить, что в отношениях , но вы можете добавить ограничения, когда вы хотите загружать:

$order = Order::with(['client' => function ($query) {
$query->withTrashed();
}])
->where('id', '=', $id)
->firstOrFail();

Вы можете проверить загруженные ограничения загрузки в документах

РЕДАКТИРОВАТЬ:

Вы можете определить withTrashed() для своих отношений, просто убедитесь, что ваши модели используют SoftDeleteTrait.

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Client extends Eloquent {
use SoftDeletingTrait;

}

ответил(а) 2021-01-19T18:42:03+03:00 2 месяца, 3 недели назад
44

В моем случае

\App\User::withTrashed()->findOrFail($userId)->first()

дает мне неправильные данные (давал данные аутентификации пользователя) тогда,

\App\User::withTrashed()->whereId($userId)->first()

дал мне точные данные.

ответил(а) 2021-01-19T18:42:03+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема