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 连接的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1:处理具有相同列名的连接

laravel 5.1 雄辩的选择与前缀连接表

Laravel 5.1通过急切加载返回连接字段

如何在 Laravel 5.1 中编写这个(左连接、子查询)?

Laravel 5.1 GCM 推送通知 SSL 错误

Laravel 5.1:启用SQLite外键约束