我的项目是一个内容管理系统,它的新版本将集成在Laravel框架中;而且有很多巨大的SQL查询需要转换为雄辩的语法。
我找到了以下tool来将我已经写好的查询转换为雄辩的语法,但这是行不通的。
有人可以指导我转换查询或帮助我找到可以胜任的工具吗?
请在下面找到我的查询示例(请注意,我的大多数查询看起来都很相似):
SELECT id, name, code,
( SELECT price FROM productprice WHERE id = p.id ) AS price,
( SELECT image FROM productpictures WHERE id = p.id LIMIT 1 )
AS image
FROM product p
WHERE categoryid = 1
谢谢。
答案 0 :(得分:1)
请使用此online tool将SQL查询转换为Laravel Builder。
转换后的查询应显示在Laravel Builder中:
DB::select(`id`,`name`,`code`)
->selectSub(`SELECT price FROM productprice WHERE id = p.id`, `price`)
->selectSub(`SELECT image FROM productpictures WHERE id = p.id LIMIT 1`, `image`)
->from(`product as p`)
->where(`categoryid`, `=`, 1)
->get();
答案 1 :(得分:1)
我只是为此制作了一个工具。您可以免费使用here
答案 2 :(得分:0)
This是最好的工具:)阅读和了解文档,因为没有一种工具能够针对每种情况自动完成。
这是我对您上面的查询的尝试:
DB::table('product as p')
->select([
'id',
'name',
'code',
'pp.price',
'ppic.image'
])
->join('productprice as pp', 'pp.id', '=', 'p.id')
->join('productpictures as ppic', 'ppic.id', '=', 'p.id')
->where('categoryid', 1)
->get();
答案 3 :(得分:0)
使用此
DB::table('product')
->select('id','name','code','productprice.price','productpictures.image')
->join('productprice','productprice.id' = 'product.id')
->join('image','productpictures.id' = 'product.id')
->where('product.categoryid',1);
->get();
答案 4 :(得分:0)
请尝试这种方式
Model::select(
'id',
'name',
'code',
DB::raw('( SELECT price FROM productprice WHERE id = p.id ) AS price,'),
DB::raw('( SELECT image FROM productpictures WHERE id = p.id LIMIT 1 ) AS image')
) ->where('categoryid', 1);
此代码通过示例创建了相同的SQL字符串。 但是我认为这不是最好的方法!
答案 5 :(得分:0)
您的SQL确实应该像这样使用联接:
SELECT
p.id,
p.name,
p.code,
pprice.price,
ppictures.image
FROM product p
LEFT JOIN productprice pprice on p.id = pprice.id
LEFT JOIN productpictures ppictures on p.id = ppictures.id
WHERE p.categoryid = 1;
您可以阅读关于here的更多有关左联接的信息。
也许也不建议像这样匹配ID,最好在productpictures和productprices上有一个product_id,然后可以在product表上对此设置外键约束。
但是,这不是问题。要将其变为雄辩的,您应该使用relationships,然后可以简单地执行以下操作:
$Product = Product::select('id', 'name', 'code')
->with('ProductPrice', 'ProductPictures')
->where('categoryid', 1)
->get();
您将能够像这样将其拉出:
$Product->id;
$Product->name;
$Product->code;
$Product->ProductPrice->price;
$Product->ProductPicture->image;
答案 6 :(得分:0)
您应该在where子句中提及表别名或表名,否则将给出完整性违背约束。
DB::table('product as p')
->join('productprice', 'product.id', '=', 'productprice.id')
->join('productpictures','currencies.id','=','product.id ')
->select('p.id' ,'p.name' , 'p.code' , 'productprice.price',
'productpictures.image as image')
->where('p.categoryid',1)
->get();
答案 7 :(得分:0)
Update accesos set salida="2019-05-05 12:00:00" where salida = "0000-00-00 00:00:00"
答案 8 :(得分:0)
我找到了这个Online Tool。它可以帮助寻找该工具的人更快地完成工作。它可能并非始终都正确。
答案 9 :(得分:-3)
SELECT *
FROM tbl_users as tu
WHERE
tu.rank!='Admin' AND
#where there is space (less than 2 children)
(SELECT COUNT(*)
FROM tbl_users
WHERE under_of=tu.username) < 2
ORDER BY
#distance from top of tree
tu.id,
#by free space
(SELECT COUNT(*)
FROM tbl_users
WHERE under_of=tu.username),
#leftmost
tu.id
将SQL查询转换为Laravel查询