Нарушение ограничения целостности: 1052 Столбец created_at в предложении where неоднозначно в laravel - PullRequest
0 голосов
/ 03 августа 2020

мой код контроллера

$data = DB::table('ride')
                    ->leftJoin('driver','ride.driver_id','=','driver.id')
                    ->select([
                    DB::raw('driver.name as driver_name'),
                    DB::raw('monthname(ride.created_at) as month'),
                    DB::raw('year(ride.created_at) as year'),
                ])
                ->where("driver.users_id", $users_id)
                ->groupBy(['year', 'month','driver_id'])
                ->get()
                ->toArray();

, но он показывает мне нарушение ограничения целостности: 1052 Столбец created_at в предложении where неоднозначен, хотя я уже упоминал модель ride.created_at

protected $table = "ride";

public $timestamps = false;

protected $fillable =[
        'status',
        'driver_id',

];

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Я не думаю, что это должно быть включено в вашу модель «Поездки».

publi c $ timestamps = false;

0 голосов
/ 03 августа 2020

Я просто настроил новый проект, чтобы проверить это. Спецификации таблицы driver нет, просто добавлено то, что можно вывести. В моем окружении ( laravel7 + mysql) он просто жаловался, что driver.name не находится в группе. После добавления поля driver_name для группировки оно работает.

Я думаю, что это не проблема запроса выше. Или вы что-то упустили в вопросе.

Потому что вы не используете created_at в where

enter image description here

  • ride migration
$table->increments('id');
$table->integer('driver_id')->unsigned();
$table->foreign('driver_id')->references('id')->on('driver');
$table->timestamps();
  • driver миграция
$table->increments('id');
$table->string('name');
$table->integer('users_id');
$table->timestamps();
  • прямой вызов в web маршрутах
Route::get('/', function () {
    $users_id = 1;

    $data = DB::table('ride')
        ->leftJoin('driver', 'ride.driver_id', '=', 'driver.id')
        ->select([
            DB::raw('driver.name as driver_name'),
            DB::raw('monthname(ride.created_at) as month'),
            DB::raw('year(ride.created_at) as year'),
        ])
        ->where("driver.users_id", $users_id)
        ->groupBy(['year', 'month', 'driver_id', 'driver_name'])
        ->get()
        ->toArray();

    dd($data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...