【问题标题】:SQLSTATE[23000]: Integrity constraint violation: 1052 using join with laravelSQLSTATE [23000]:完整性约束违规:1052 使用 laravel 连接
【发布时间】:2018-11-24 00:50:11
【问题描述】:

我有两张表,我正在尝试 join 它们以获取所有引用的表,但出现错误,但我不确定我做错了哪一部分,有人可以帮帮我吗?

我有这张票的表迁移

public function up()
{
    Schema::create('tickets', function (Blueprint $table) {
        $table->increments('id');
        $table->string('ticketNumber')->nullable(true)->unique();
        $table->boolean('is_deleted')->default(false);
        $table->timestamps();
    });
}

我有这张表保存票 ticket_notes 的注释,我使用 ticketNumber 而不是 id 引用

public function up()
{
    Schema::defaultStringLength(191);
    Schema::create('ticket_notes', function (Blueprint $table) {
        $table->string('ticketNumber');
        $table->foreign('ticketNumber')->references('ticketNumber')->on('tickets');
        $table->increments('id');
        $table->string('rloc', 50);
        $table->boolean('is_deleted')->default(false);
        $table->timestamps();
    });
}

我使用query builder 代替eloquent relationships 进行查询

DB::table('tickets')->where([
    'ticketNumber' => 12345,
    'is_deleted'   => false,
])
    ->join('ticket_notes', 'tickets.ticketNumber', '=', 'ticket_notes.ticketNumber')
    ->select('tickets.*');

我收到此错误 SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'ticketNumber' in where clause is ambiguous (SQL: selecttickets.* fromticketsinner jointicket_notesontickets.ticketNumber=ticket_notes.ticketNumberwhere (ticketNumber4@9876584339@is_deletedp>

谁能让我重新审视一下我在加入时做错了什么? 提前感谢您的任何建议/帮助。

【问题讨论】:

  • 这是一个常见问题解答。请始终使用谷歌错误消息和许多清晰、简洁和特定的版本/措辞,使用和不使用您的特定字符串/名称和“site:stackoverflow.com”和标签并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用 1 个变体搜索作为标签的标题和关键字。请参阅向下投票箭头鼠标悬停文本。如果您确实有要发布的非重复代码问题,请阅读并在minimal reproducible example 上采取行动。

标签: php mysql sql laravel join


【解决方案1】:

由于加入,有 2 列名为 ticketNumber。指定你想要的。 'tickets.ticketNumber' => 12345

DB::table('tickets')->where([
    'tickets.ticketNumber' => 12345,
    'is_deleted'   => false,
])
->join('ticket_notes', 'tickets.ticketNumber', '=', 
    'ticket_notes.ticketNumber')
->select('tickets.*');

【讨论】:

  • 啊! thx thx,确实需要新鲜的眼睛。我知道这不在问题中,您的回答解决了它。但是,如果您能帮我一把,这只是另一个简单的问题。我在查询后意识到如果有两个音符,这会给我两个数组。是否可以将它们组合并返回一个对象并将注释作为一个数组来代替?
  • @Dora 请在新帖子中提问,而不是 cmets。
猜你喜欢
  • 2022-11-02
  • 2020-01-31
  • 2021-03-22
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2015-07-17
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多