php - 检查 belongsToMany 关系是否存在 - Laravel

标签 php laravel laravel-4

我的两个表(客户和产品)有一个使用 Laravel 的 blongToMany 和一个数据透视表的多对多关系。 现在我想检查某个客户是否有某个产品。

我可以创建一个模型来检查数据透视表,但由于 Laravel 不需要该模型用于 belongsToMany 方法,我想知道是否有另一种方法可以在没有数据透视表模型的情况下检查某种关系是否存在。

最佳答案

我认为官方的做法是这样做:

$client = Client::find(1);
$exists = $client->products->contains($product_id);

这有点浪费,因为它会执行 SELECT 查询,将所有结果放入 Collection 然后最后执行 foreach Collection 使用您传入的 ID 查找模型。但是,它不需要对数据透视表进行建模。

如果您不喜欢这样做的浪费,您可以在 SQL/Query Builder 中自己完成,这也不需要对表进行建模(也不需要获取 Client 模型如果您还没有将其用于其他目的:

$exists = DB::table('client_product')
    ->whereClientId($client_id)
    ->whereProductId($product_id)
    ->count() > 0;

关于php - 检查 belongsToMany 关系是否存在 - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555697/

相关文章:

PHP:获取月份的星期几

php - 我无法将数据插入 Laravel 5.2 中的表中

php - Laravel 缓存原始查询

php - 在 laravel 中急切加载时关系数组为 null

php - 使用 AJAX 将数据保存到 mysql 时遇到问题

php - 如何制作按多种条件排序并在 PHP 中运行的 SQLite 查询

php - 是否有可能防止 MySQL 查询出错并导致您的网站瘫痪?

javascript - 使用 Laravel 时如何将参数传递给 jQuery 函数

Laravel Eloquent ->with() 和 ->select() 相互冲突

php - Laravel:在使用 Query Builder 或 Eloquent ORM 时对每次插入/更新执行一些任务