Ошибка запроса модели Laravel: «Illuminate \ Database \ QueryException: SQLSTATE [23000]: нарушение ограничения целостности» - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь объединить 2 таблицы, но получаю эту ошибку:

Подсветка \ База данных \ QueryException: SQLSTATE [23000]: Нарушение ограничения целостности : 1052 Столбец 'user_id', где предложение неоднозначно (SQL: выберите sadaqah_history. total, sadaqah_history. foundation_donate_id из dzikir_counter внутреннее соединение sadaqah_history в sadaqah_history. user_id = dzikir_counter. user_id, где user_id = 25 и DATE_FORMAT (dzikir_date, '% Y-% m-% d') МЕЖДУ «2019-07-01» И «2019-07-31») в файле /var/www/backend.zipedia.id/vendor/laravel/framework/src/Illuminate/Database/Connection.php в строке 664

Код моего API-контроллера:

$startDate = Carbon::parse(new Carbon('first day of this month'))->toDateString();
$endDate = Carbon::parse(new Carbon('last day of this month'))->toDateString();
$models = DzikirCounter::where('user_id', $user->id)
           ->whereRaw("DATE_FORMAT(dzikir_date, '%Y-%m-%d') BETWEEN '$startDate' AND '$endDate'")
           ->join('sadaqah_history', 'sadaqah_history.user_id', '=', 'dzikir_counter.user_id')
           ->get(['sadaqah_history.total', 'sadaqah_history.foundation_donate_id'])              
           ->actived()
           ->orderBy('dzikir_date', 'desc')
           ->get();

Модель 1 (Dzikir_Counter):

protected $table = 'dzikir_counter';

protected $fillable = [
    'user_id',
    'counter',
    'dzikir_total',
    'dzikir_date',
    'total',
    'dzikir_detail',
    'status',
    'deleted_at',
    'created_at',
    'updated_at',
    'created_by',
    'updated_by',
];

protected $appends = [
    'dzikir_details'
];

protected $hidden = [
    'dzikir_detail',
    'user_id',
    'created_by',
    'updated_by',
    'deleted_at'
];
protected $casts = [
    'counter' => 'int',
    'dzikir_total' => 'int',
    'status' => 'int',
    'user_id' => 'int'
];

Модель 2 (Sadaqah_History):

    protected $table = 'sadaqah_history';

    protected $fillable = [
         'user_id',
         'name',
         'point_total',
         'total',
         'sadaqah_date',
         'status',
         'is_dzikir',
         'foundation_donate_id',
         'created_at',
         'updated_at',
         'created_by',
         'updated_by',
    ];
    protected $hidden = [
        'id',
        'user_id',
        'name',
        'point_total',
        'created_at',
        'updated_at',
        'created_by',
        'updated_by',        
        'foundation_donate_id',
        'created_by',
        'updated_by'
    ];
    protected $casts = [
         'status' => 'int',
         'is_dzikir' => 'int',
         'point_total' => 'int',
         'total' => 'int',
         'user_id' => 'int',
         'foundation_donate_id' => 'int',
    ];

То, чего я хочу добиться, это SQL-запрос , идентичный этому:

SELECT dzikir_counter.user_id, dzikir_counter.dzikir_date, sadaqah_history.sadaqah_date, dzikir_counter.dzikir_total, sadaqah_history.point_total, sadaqah_hh ОТ dzikir_counter внутреннее объединение sadaqah_history ВКЛ dzikir_counter.user_id = sadaqah_history.user_id И dzikir_counter.dzikir_date = sadaqah_history.sada44ahd ЗАКАЗАТЬ ПО sadaqah_history. foundation_donate_id DESC

1 Ответ

1 голос
/ 08 июля 2019

Заменить

DzikirCounter::where('user_id', $user->id)

с

DzikirCounter::where('dzikir_counter.user_id', $user->id)

Полученная ошибка означает, что столбец user_id существует в таблицах dzikir_counter и sadaqah_history. В этом случае вы должны указать, какую таблицу ГДЕ следует выполнить.

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