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


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


我的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_history.total,sadaqah_ate
      从dzikir_counter内部联接sadaqah_history开启dzikir_counter.user_id = sadaqah_history.user_id和dzikir_counter.dzikir_date = sadaqah_history.sadaqah_date
      按sadaqah_historyfoundation_donate_id DESC排序

最佳答案

更换

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



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

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

关于php - Laravel模型查询错误:“Illuminate\Database\QueryException:SQLSTATE [23000]:违反完整性约束”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56926714/

10-10 16:43