Laravel 6 идентификатор меняется после сортировки по отношениям - PullRequest
0 голосов
/ 27 марта 2020

Я не знаю, как это объяснить ...

On Tinker:

$m = App\Models\Mobiliari::Buscar('5')
$m->get()
=> Illuminate\Database\Eloquent\Collection {#3038
     all: [
       App\Models\Mobiliari {#3051
         id: "5",
         entitat_id: "3",
         tipus_mobiliari_id: "2",
         descripcio: null,
         data_compra: null,
         proveidor_id: "2",
         factura: null,
         cost: ".0000",
         ubicacio_id: "2",
       },
     ],
   }

Buscar - это функция для фильтрации по некоторым полям:

public function scopeBuscar($query, $filtre)
    {
        if ($filtre)
        {
            return $query->where('mobiliari.id', $filtre)
                ->orWhere('descripcio', 'like', '%'.$filtre.'%')
                ->orWhereHas('Entitat', function($q) use ($filtre) {
                    $q->where('entitat', 'like', '%'.$filtre.'%');
                })
                ->orWhereHas('TipusMobiliari', function($q) use ($filtre) {
                    $q->where('tipus', 'like', '%'.$filtre.'%');
                })
                ->orWhereHas('Proveidor', function($q) use ($filtre) {
                    $q->where('proveidor', 'like', '%'.$filtre.'%');
                })
                ->orWhereHas('Ubicacio', function($q) use ($filtre) {
                    $q->where('edifici', 'like', '%'.$filtre.'%')
                        ->orWhere('ubicacio', 'like', '%'.$filtre.'%');
                });
        }
    }

Затем, при попытке упорядочить результат через связанную таблицу, идентификатор изменения значения te

$m->join('entitat', 'mobiliari.entitat_id', '=', 'entitat.id')->orderBy('entitat.entitat','asc')->get()
=> Illuminate\Database\Eloquent\Collection {#3041
     all: [
       App\Models\Mobiliari {#3040
         id: "3",
         entitat_id: "3",
         tipus_mobiliari_id: "2",
         descripcio: null,
         data_compra: null,
         proveidor_id: "2",
         factura: null,
         cost: ".0000",
         ubicacio_id: "2",
         entitat: "UAB Idiomes",
         rao_social: "Escola d'Idiomes Moderns Casa Convalescència SL",
       },
     ],
   }

Я захватил запрос, сгенерированный с помощью DB :: enableQueryLog (); и dd (DB :: getQueryLog ()), выполнив его на сервере de SQL и вернув правильный идентификатор ...

Кто-нибудь знает или может объяснить, почему идентификатор изменяется?

1 Ответ

1 голос
/ 27 марта 2020

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

Добавление select () с вашей текущей таблицей поможет решить вашу проблему. Вы все еще можете выбрать дополнительные столбцы, если вам нужно, но если вы используете идентификаторы из других таблиц, переименуйте столбцы в SQL.

->select('mobiliari.*');

. Попробуйте следующий код:

$m->join('entitat', 'mobiliari.entitat_id', '=', 'entitat.id')
    ->orderBy('entitat.entitat','asc')
    ->select('mobiliari.*')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...