Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel DB::table查询中预替换内容?_Php_Laravel_Laravel 5_Eloquent - Fatal编程技术网

Php 如何在laravel DB::table查询中预替换内容?

Php 如何在laravel DB::table查询中预替换内容?,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我想用输入搜索框中的关键字替换文本匹配项,替换为$keyword。我不知道为什么它不起作用。请查看代码并帮助我 我使用的是PHP7.X和Laravel5.7 $items = DB::table('element_designs') ->join('elements', function($join){ $join->on('element_designs.id', '=', 'elements.element_

我想用输入搜索框中的关键字替换文本匹配项,替换为$keyword。我不知道为什么它不起作用。请查看代码并帮助我

我使用的是PHP7.X和Laravel5.7

$items = DB::table('element_designs')
                ->join('elements', function($join){
                    $join->on('element_designs.id', '=', 'elements.element_design_id')
                        ->where('elements.deleted_at', null);
                })
                ->leftJoin('locations', function($join){
                    $join->on('elements.location_id', '=', 'locations.id')
                        ->where('locations.disable_flg', false);
                })
                ->leftJoin('areas', function($join){
                    $join->on('elements.area_id', '=', 'areas.id')
                        ->where('areas.disable_flg', false);
                })
                ->where('element_designs.disable_flg', false)
                ->where(function($query) use ($keyword){
                    $query->where('element_designs.element_name', 'LIKE', '%'.$keyword.'%')
                        ->orWhere('locations.location_name', 'LIKE', '%'.$keyword.'%')
                        ->orWhere('areas.area_name', 'LIKE', '%'.$keyword.'%')
                        ->orWhere('elements.updated_at', 'LIKE', '%'.$keyword.'%');
                })
                ->select('element_designs.id as element_design_id', 'element_designs.doc_no', 'elements.id as element_id', 'element_designs.element_name', 'locations.location_name', 'areas.area_name',
                    'elements.updated_at')
                ->paginate()
                ->map(function ($row) use ($keyword) {
                    $row->element_name = preg_replace('/' . $keyword . '/', '<strong>'.$keyword.'</strong>', $row->element_name)
                        ->location_name = preg_replace('/' . $keyword . '/', '<strong>'.$keyword.'</strong>', $row->location_name);
                    return $row;
                });

            return view('element.data', ['items' => $items]);
$items=DB::table('element_designs')
->join('elements',function($join){
$join->on('element\u designs.id','=','elements.element\u design\u id'))
->其中('elements.deleted_at',null);
})
->leftJoin('locations',函数($join){
$join->on('elements.location_id','=','locations.id'))
->其中('locations.disable_flg',false);
})
->leftJoin('areas',函数($join){
$join->on('elements.area_id','=','areas.id'))
->其中('areas.disable_flg',false);
})
->其中('element\u designs.disable\u flg',false)
->其中(函数($query)使用($keyword){
$query->where('element\u designs.element\u name','LIKE','%'。$keyword'%'))
->orWhere('locations.location_name','LIKE','%%.$keyword.'%'))
->orWhere('areas.area_name','LIKE','%'.$keyword.'%'))
->orWhere('elements.updated_at'、'LIKE'、'%'.$keyword.'%');
})
->选择(‘element_designs.id作为element_design_id’、‘element_designs.doc_no’、‘element.id作为element_id’、‘element_designs.element_name’、‘locations.location_name’、‘area.area_name’,
'elements.updated_at')
->分页()
->映射(函数($row)使用($keyword){
$row->element_name=preg_replace('/'.$keyword'/',''.$keyword'',$row->element_name)
->location_name=preg_replace(“/”.$keyword.“/”、“”.$keyword.”、$row->location_name);
返回$row;
});
返回视图('element.data',['items'=>$items]);
当我输入关键字“abc”时,我希望abc文本数学的结果会很强。示例:“要素1 abc”=>“要素1abc”,“位置1 abc”=>“位置1abc” 因此,在index.blade.php中,文本与关键字匹配的结果将显示为strong。

据我所知
map()
创建新集合,而不是使用当前集合,要使用当前集合,请使用
transform()


[更新] 下面是您在评论中要求的示例

注意:我不确定代码的过滤部分,您可以自己尝试并调试它

$items = ElementDesign::with(['elements:id,updated_at','elements.locations:location_name','elements.areas:area_name'])
        ->select('element_designs.id as element_design_id', 'element_designs.doc_no','element_designs.element_name')
        ->where('disable_fld',false)
        ->paginate();

$items = $items->getCollection()->transform(function($row) use ($keyword){

     $row->element_name = preg_replace('/' . $keyword . '/', '<strong>'.$keyword.'</strong>', $row->element_name)                            ->location_name = preg_replace('/' . $keyword . '/', '<strong>'.$keyword.'</strong>', $row->location_name);
        return $row;

})->filter(function($item) use ($keyword){


/*not sure about this part please try and debug, but the general idea should work*/
        $item->where('element_name', 'LIKE', '%'.$keyword.'%');
            ->where('locations.location_name', 'LIKE', '%'.$keyword.'%')
            ->where('areas.area_name', 'LIKE', '%'.$keyword.'%')
            ->where('elements.updated_at', 'LIKE', '%'.$keyword.'%');
    });
$items=ElementDesign::with(['elements:id,updated_at','elements.locations:location_name','elements.areas:area_name']))
->选择('element_designs.id as element_design_id'、'element_designs.doc_no'、'element_designs.element_name')
->其中('disable_fld',false)
->分页();
$items=$items->getCollection()->转换(函数($row)使用($keyword){
$row->element_name=preg_replace('/'.$keyword'/',''.$keyword'',$row->element_name)->location_name=preg_replace('/'.$keyword'/',“.$keyword'',$row->location_name);
返回$row;
})->过滤器(函数($item)使用($keyword){
/*对此部分不确定,请尝试并调试,但总体思路应该是可行的*/
$item->where('element_name','LIKE','%.$keyword'%');
->其中('locations.location_name','LIKE','%%.$keyword.'%'))
->其中('areas.area_name','LIKE','%%.$keyword.'%'))
->其中('elements.updated_at'、'LIKE'、'%'.$keyword.'%');
});
此外,您还可以查看它,它将对本主题有所帮助

$row->element_name = preg_replace('/' . $keyword . '/', '<strong>$keyword</strong>', $row->element_name)
                        ->location_name = preg_replace('/' . $keyword . '/', '<strong>$keyword</strong>', $row->location_name);
$row->element\u name=preg\u replace('/'.$keyword'/','$keyword,$row->element\u name)
->location_name=preg_replace(“/”.$keyword.“/”,“$keyword”,$row->location_name);

这里不需要连接标记和变量。

嗨,Sagarpanchal,我从“”改为“$keyword”。”改为“$keyword”。这不起作用。嗨,穆罕默德·奥马尔,你能给我举个例子,作为我上面雄辩的问题吗?非常感谢。@ThienHoang我已经更新了我的答案。我还有一个问题,上面的问题很有说服力。如何区分大小写在喜欢的地方。示例:对于元素名“Ab”,我希望在用户使用Ab、Ab或Ab进行搜索时得到一个结果。当我输入“Ab”时,->where('element_designs.element_name'、'LIKE'、'%'.$关键字'%')才有结果。我应该在where子句中更改什么?非常感谢你。