laravel 写多个where子句来过滤文件
laravel write multiple where clause to filter files
我不知道如何使用 eloquent 在我的 laravel 9 应用程序中过滤它。
我有一个文件 table 和 file_metadata (pivot) - 其中文件有多个元数据:
例如:file_metadata 3 个文件:
metadata_id|file_id|value
3 | 5 | 1
6 | 5 | 1
3 | 6 | 1
6 | 6 | 1
3 | 7 | 1
6 | 7 | 0
因此文件 5、6、7 有 2 个元数据(3 个有效,6 个已签名)。文件 7 处于活动状态但未签名。
如何编写 where 子句以在这种情况下显示已签名且处于活动状态的两个文件 (5,6)?
我已经试过了,但还显示了 ID 为 7 的文件(未签名)
->where(function($query) {
$query->orWhere('file_metadata.metadata_id', 3);
$query->orWhere('file_metadata.metadata_id', 6)
$query->where('file_metadata.value', true);
})
我也试过这个:
->where(function($query) {
$query->Where([
['file_metadata.metadata_id', 3],
['file_metadata.value', true']
]);
$query->where([
['file_metadata.metadata_id', 6],
['file_metadata.value', true']
]);
}
知道如何设置条件来获取已签名且有效的文件吗?
calin24 试试这个
->where(function($query) {
$query->orWhere('file_metadata.metadata_id', 3);
$query->orWhere('file_metadata.metadata_id', 6);
})->where('file_metadata.value', true)
你可以像下面这样使用子查询
->where('file_metadata.metadata_id', 6)
->where('file_metadata.value', 1);
->whereIn('file_metadata.file_id', function($query) {
$query->select('file_id')->from('file_metadata')
->where('metadata_id', 3)->where('value', 1);
})
试试这个:
->where(function($query) {
$query->where('file_metadata.metadata_id', 3)->where('file_metadata.value', true);
$query->where('file_metadata.metadata_id', 6)->where('file_metadata.value', true);
})
最后的 where 子句是这样的:
->where(function ($query) use ($metas_ids) {
$query->whereIn('file_metadata.file_id', function($query) use ($metas_ids) {
$query->select('file_id')
->from('file_metadata')
->whereIn('metadata_id', $metas_ids)
->where('value', true)
->groupBy('file_id')
->havingRaw('count(file_id) = ?', [count($metas_ids)])
});
})
我不知道如何使用 eloquent 在我的 laravel 9 应用程序中过滤它。
我有一个文件 table 和 file_metadata (pivot) - 其中文件有多个元数据:
例如:file_metadata 3 个文件:
metadata_id|file_id|value
3 | 5 | 1
6 | 5 | 1
3 | 6 | 1
6 | 6 | 1
3 | 7 | 1
6 | 7 | 0
因此文件 5、6、7 有 2 个元数据(3 个有效,6 个已签名)。文件 7 处于活动状态但未签名。
如何编写 where 子句以在这种情况下显示已签名且处于活动状态的两个文件 (5,6)?
我已经试过了,但还显示了 ID 为 7 的文件(未签名)
->where(function($query) {
$query->orWhere('file_metadata.metadata_id', 3);
$query->orWhere('file_metadata.metadata_id', 6)
$query->where('file_metadata.value', true);
})
我也试过这个:
->where(function($query) {
$query->Where([
['file_metadata.metadata_id', 3],
['file_metadata.value', true']
]);
$query->where([
['file_metadata.metadata_id', 6],
['file_metadata.value', true']
]);
}
知道如何设置条件来获取已签名且有效的文件吗?
calin24 试试这个
->where(function($query) {
$query->orWhere('file_metadata.metadata_id', 3);
$query->orWhere('file_metadata.metadata_id', 6);
})->where('file_metadata.value', true)
你可以像下面这样使用子查询
->where('file_metadata.metadata_id', 6)
->where('file_metadata.value', 1);
->whereIn('file_metadata.file_id', function($query) {
$query->select('file_id')->from('file_metadata')
->where('metadata_id', 3)->where('value', 1);
})
试试这个:
->where(function($query) {
$query->where('file_metadata.metadata_id', 3)->where('file_metadata.value', true);
$query->where('file_metadata.metadata_id', 6)->where('file_metadata.value', true);
})
最后的 where 子句是这样的:
->where(function ($query) use ($metas_ids) {
$query->whereIn('file_metadata.file_id', function($query) use ($metas_ids) {
$query->select('file_id')
->from('file_metadata')
->whereIn('metadata_id', $metas_ids)
->where('value', true)
->groupBy('file_id')
->havingRaw('count(file_id) = ?', [count($metas_ids)])
});
})