Laravel模型查询错误:“ Illuminate \ Database \ QueryException:SQLSTATE [23000]:违反完整性约束”

时间:2019-07-07 22:51:55

标签: php mysql laravel

我尝试加入2个表,但出现此错误:

  

Illuminate \ Database \ QueryException: SQLSTATE [23000]:违反完整性约束:1052 where子句中的“ user_id”列不明确(SQL:选择sadaqah_historytotalsadaqah_historyfoundation_donate_id来自{{1}上dzikir_counter内部联接sadaqah_historysadaqah_history = user_iddzikir_counter user_id = 25和DATE_FORMAT(dzikir_date,'%Y-%m-%d')在/var/www/backend.zipedia文件中的'2019-07-01'和'2019-07-31'之间) .id / vendor / laravel / framework / src / Illuminate / Database / Connection.php在第664行

我的API控制器代码:

user_id

模型1(Dzikir_Counter):

$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();

模型2(Sadaqah_History):

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'
];

我要实现的是与此相同的 SQL查询

  

SELECT ,dzikir_counter.user_id,dzikir_counter.dzikir_date,sadaqah_history.sadaqah_date,dzikir_counter.dzikir_total,sadaqah_history.point_total,sadaqah_historyateto.sadaqah_history.total。        FROM 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', ]; 内部联接 dzikir_counter 开启 dzikir_counter.user_id = sadaqah_history.user_id和dzikir_counter.dzikir_date = sadaqah_history.sadaqah_date
       ORDER BY sadaqah_historysadaqah_history DESC

1 个答案:

答案 0 :(得分:1)

替换

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

使用

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

您收到的错误意味着user_iddzikir_counter表中都存在sadaqah_history列。在这种情况下,您应该指定应在哪个表上执行WHERE。