我有2个查询,我想检查一个查询的值是否存在于其他查询的数组中。我有"维护"其中包含" process_id"和"进程" (进程ID的数组)。我想检查进程中是否存在每个process_id。在我的控制器中:
$processes = DB::select('select id from processes');
$maintenance = DB::select('select process_id from maintenances where car_id ="' . $id . '" group by process_id');
$result = array();
foreach ($processes as $key => $value) {
$result[] = $value->id;
}
在我的Helper.php中
public static function array_value($value, $array) {
$results = 0;
$str = "$value";
if (in_array($str, $array)) {
$results += 5;
} else {
$results += 1;
}
return $results;
}
在我看来
@foreach ($maintenance as $m)
<tr> @if (Helpers\Helper::array_value($m->process_id, $processes)== 5)
<td> {{ $m->process }} </td>
@elseif (Helpers\Helper::array_value($m->process_id, $processes)== 1)
<td>Missing</td>
@endif
</tr>
@endforeach
它只显示第一个if中的值。当在数组流程中找不到process_id时,它不会显示Missing
答案 0 :(得分:1)
如果您正在使用laravel,您是否考虑建立关系以简化此任务?
我认为流程和维护会有一对多的关系吗?
您可以设置多对多的关系:
您的流程模型中的:
public function maintenance() {
return $this->belongsTo('Maintenance')
}
(其中Maintenance是模型类的名称。函数名称可以是任何内容)
在您的维护模式中:
public function process() {
return $this->hasMany('Process')
}
然后您修改的模型检索是:
$maintenance = Maintenance::find($id);
更新: $ maintenance =维护::其中(&#39; car_id&#39;,&#39; =&#39;,$ id) - &gt; first();
$maintenance->load('process');
(you could chain these)
然后在你看来:
@if($maintenance->process()->first())
{{$maintenance->process()->name}} //or whatever positive output
@else
"NO process found" //or your negative output
@endif
这段关系为你付出了艰苦的努力 - 然后你也可以使用相关模式的属性,例如名称等,这可能更加用户友好。
first()
方法检索第一个相关模型。如果这是空的(即未找到)则负面响应起作用。你也可以使用count()
,这可能比使用更好:
@if($maintence->process()->count() > 0)
但一切都取决于你想做什么。
你也可以探索将返回一个集合的get()方法,如果你将你的关系扩展到很多很多很有用,例如每个维护可能有很多进程/
希望这有帮助