Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mit2's avatar
Level 1

Database create leftjoin

Hi i want create request to database

SELECT * FROM villages 
LEFT JOIN worlds ON villages.idworld =  worlds.id
WHERE worlds.openworld = 1 AND villages.iduser !=  $iduser AND villages.mainvillage = 1

right now i create

$getallworld = DB::table('villages')->select("villages.id as numerwioski", "villages.mainvillage", "villages.idworld", "villages.iduser", "worlds.id as numerswiata", "worlds.openworld")->leftJoin("worlds", "villages.iduser", "!=", $userid)->get();

but i have error

SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'on clause' (SQL: select `villages`.`id` as `numerwioski`, `villages`.`mainvillage`, `villages`.`idworld`, `villages`.`iduser`, `worlds`.`id` as `numerswiata`, `worlds`.`openworld` from `villages` left join `worlds` on `villages`.`iduser` != `1`)

what i must change to get this request ?

0 likes
3 replies
Tray2's avatar

This part is the problem

->leftJoin("worlds", "villages.iduser", "!=", $userid)->get();

You try to do a leftjoin with the users id in this case 1 and you need a column name to do a join. The not equal part needs to be moved to a where clause.

yaojinhui's avatar

Try this

$getallworld = DB::table('villages')
->select("villages.id as numerwioski", "villages.mainvillage", "villages.idworld", "villages.iduser", "worlds.id as numerswiata", "worlds.openworld")
->leftJoin("worlds", "villages.idworld", "=", "worlds.id")
->where("worlds.openworld", 1)
->where("villages.iduser", "!=", $userid)
->where("villages.mainvillage", 1)
->get();

Please or to participate in this conversation.