错误:违反完整性约束:在Laravel口才加入时为1052

时间:2019-02-28 10:50:58

标签: php mysql laravel

我试图通过指定两个表的关系(即外键和本地键)并使用find(id)将两个表连接在一起。从头开始,我使用where和get()。它没有给出相同的错误,然后我注释掉了使用find($ id)的where子句

// Collection(s)
public interface ThingCollection<TThing> where TThing : IThing { }
public interface SpecialThingCollection<TSpecialThing> : ThingCollection<IThing> where  TSpecialThing : ISpecialThing{ }

这是根据选择显示的功能 公共功能表演($ id)         {

"SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous (SQL: select `votes`.`flavour`, `users`.`email` from `votes` inner join `users` on `votes`.`user_id` = `users`.`id` and `id` = 1 limit 1)",

全部显示:在该功能中,我也应该使用join,但是我只使用了正确显示的votes表,因此我需要在votes.user_id = users.id上加入votes和users表

         $dbconnect = DB::table('votes')
         ->join('users', 'votes.user_id', '=', 'users.id')
         //->where('votes.id', $id)
         ->select('votes.id','votes.date_of_birth','votes.voter_ip','votes.flavour', 'users.email')
         ->find($id);
         $vote = auth()->user()->$dbconnect;
        if (!$vote) {
            return response()->json([
                'success' => false,
                'message' => 'Vote with id ' . $id . ' not found'
            ], 400);
        }

        return response()->json([
            'success' => true,
            'data' => $vote->toArray()
        ], 400);
    }

谢谢

1 个答案:

答案 0 :(得分:1)

这是因为您正在使用->find($id)函数。该函数将查找模型的主键(在本例中为id)并将其用作过滤器。但是,由于连接的缘故,该字段不明确。

要解决此问题,您可以手动添加过滤器:

$dbconnect = DB::table('votes')
     ->join('users', 'votes.user_id', '=', 'users.id')
     ->select('votes.id','votes.date_of_birth','votes.voter_ip','votes.flavour', 'users.email')
     ->where('votes.id', $id)
     ->first();