Laravel 5.1 DBQuery 连接
Posted
技术标签:
【中文标题】Laravel 5.1 DBQuery 连接【英文标题】:Laravel 5.1 DBQuery Join 【发布时间】:2016-02-29 02:08:27 【问题描述】:我有两张桌子:
products: id, name, manufacturer
myproducts:id, user_id, product_id
我通过我的身份验证令牌知道 user_id。使用此 user_id 令牌,想从 myproducts 中获取 product_id 和 id,然后查询 products 表以获取 mymproducts 中的 product_id 与 products 表中的 id 匹配的名称和制造商。目标是为用户提供一个可编辑的列表,他/她可以在 myproducts 表中进行编辑。
到目前为止,我只能做到
$productlist = DB:table('myproducts')->where('user_id', $userid)->get();
这将返回用户拥有的所有产品。但我无法加入表格以返回用户拥有的每个产品的产品数据。
有什么建议吗?
伪代码:
Select * from myproducts wheer user_id = $userid
对于每个产品 -> 获取产品名称和制造商,其中 id 等于 product_id
【问题讨论】:
【参考方案1】:$all_products = \DB::table('myproducts')
->leftjoin('products', 'products.id', '=','myproducts.id')
->where('myproducts.user_id','=',\Auth::user()->id)
->WhereNull('products.deleted_at')
->get();
【讨论】:
稍作调整即可工作。我也想从 myproducts 获得 id。我最终加入了一个联接而不是一个左联接,并在加入后调用了表中的产品和 myproducts。还提供了 $user_id,因为我使用的身份验证机制与开箱即用的 Laravel 身份验证不同。感谢您的帮助。【参考方案2】:你可以使用 DB::table 查询来做到这一点,但在 Laravel 中做到这一点的最好方法是使用 Eloquent 关系。
为两个表创建一个Model,然后使用模型来定义表之间的关系。
完成此操作后,获取用户拥有的产品的产品数据就像这样简单:
$productData = User::find(1)->product;
我强烈建议观看有关建立 Eloquent 关系的教程,它解释得非常好:
https://laracasts.com/series/laravel-5-fundamentals
【讨论】:
如果我只是找到产品,这种方法会奏效。但我希望查询多个表。多对多的关系很可能会奏效,但对于我正在做的事情来说,这将是过度的。我所需要的只是我宁静的 api 中的一个函数来执行 CRUD。感谢您的帮助。以上是关于Laravel 5.1 DBQuery 连接的主要内容,如果未能解决你的问题,请参考以下文章