
假设我们有两个模型:user 和 orders,它们之间存在 belongsto 关系。我们的目标是获取所有 user 模型的 id 和 name,但仅限于那些 orders 模型满足 order 字段为 false 且 uploadid 字段为 null 的用户。
使用 with 方法加载关联关系并不能直接达到筛选主模型的目的。with 方法会加载所有 User 模型及其关联的 Orders 模型,然后在结果集中进行筛选,效率较低。
正确的做法是使用 whereHas 方法:
$data = User::whereHas('orders', function ($query) {
$query->where('order', false);
$query->whereNull('uploadId');
})->pluck('name', 'id');这段代码的含义是:
User 模型定义:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function orders()
{
return $this->belongsTo(Orders::class, 'order_userId', 'id');
}
}Orders 模型定义(示例):
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Orders extends Model
{
// ... 其他代码
}注意事项:
总结:
whereHas 方法是 Laravel Eloquent 中一个强大的工具,用于基于关联模型的条件来筛选主模型数据。通过合理使用 whereHas 方法,可以避免不必要的数据加载,提升查询性能,并使代码更加简洁易懂。在处理复杂的关联查询时,whereHas 方法是一个值得掌握的技巧。
以上就是Laravel Eloquent:基于条件获取关联数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号