laravel - 完整性约束违规 : 1052 Column 'updated_at' in field list is ambiguous

标签 laravel eloquent laravel-5.8

App\User Model 文件内容:-

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements JWTSubject
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    public function khatmas()
    {
        return $this->hasMany('App\Khatma');
        
    }

    public function messages()
    {
        return $this->hasManyThrough('App\KhatmaRead','App\Khatma')
        ->select('reader_name','message','updated_at')
        ->where('message','!=',NULL);
    }

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

     public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}

khatma_reads 迁移文件:-

    $table->bigIncrements('id');
    $table->unsignedBigInteger('khatma_id');
    $table->foreign('khatma_id')->references('id')->on('khatmas')->onDelete('cascade');
    $table->string('reader_name')->nullable();
    $table->longText('message')->nullable();
    $table->timestamps();

在 user->message() 方法中,当我将列“updated_at”或“created_at”放在 ->select 方法上时出现错误:-

"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'updated_at' in field list is ambiguous (SQL: select `reader_name`, `message`, `updated_at`, `khatmas`.`user_id` as `laravel_through_key` from `khatma_reads` inner join `khatmas` on `khatmas`.`id` = `khatma_reads`.`khatma_id` where `message` is not null and `khatmas`.`user_id` in (1))"

当我从查询构建器中完全删除 ->select() 方法时,我得到了所有列的响应,包括 created_at 和 updated_at 列。

我该如何解决这个问题?

最佳答案

那是因为你的 KhatmaReadKhatma 模型有 update_at 列,这里:

->select('reader_name','message','updated_at')

您没有指定要从哪个表中获取该列,并且它是模棱两可的。你应该这样做:

->select('reader_name','message','khatma_reads.updated_at')

关于laravel - 完整性约束违规 : 1052 Column 'updated_at' in field list is ambiguous,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62505572/

相关文章:

mysql - HasManyThrough Eloquent 关系,Laravel 5.6,5.7

php - 拉维尔 5.2 : Class Imagick not found

php - 在子模型中使用多态关系会导致无限循环?

php - laravel 5.1 中的安全和干净代码

mysql - 如果在 where 条件内满足条件则设置一个值

Laravel 5.8 whereHasMorph "dot"语法不支持?

Laravel 5.6 Api - 搜索、排序和过滤数据列表

php - Laravel 拒绝在 iFrame 中显示为 "' X-Frame-Options' to 'SAMEORIGIN'。”

http - 为什么axios发出请求时总是将https转换成http?

php - 验证 Laravel 请求的最佳方法