嗨,我有一个laravel项目,我在这里使用递归模型。它工作正常,但我希望能够在任何子字段与搜索查询匹配的情况下返回结果。
这是我的数据模型
/**
* Declares the relationship between a log and its children
* @access public
* @return Illuminate\Database\Eloquent\Relations\Relation
*/
public function children()
{
return $this->hasMany(self::class, 'parent', 'id');
}
/**
* Declares the relationship between a log and its parent
* @access public
* @return Illuminate\Database\Eloquent\Relations\Relation
*/
public function parent()
{
return $this->belongsTo(self::class, 'parent', 'id');
}
/**
* Declares the relationship between a log and its meta data/ children
* @access public
* @return Illuminate\Database\Eloquent\Relations\Relation
*/
public function metaData()
{
return $this->hasMany(MetaData::class, 'parent', 'id');
}
这是我的元数据模型
/**
* Declares the relationship between meta data and its parent
* @access public
* @return Illuminate\Database\Eloquent\Relations\Relation
*/
public function parent()
{
return $this->belongsTo(Data::class, 'parent', 'id');
}
因此,数据是顶层,每个数据点都可以包含元数据,但是元数据也可以包含数据,这意味着它将降到另一个层次。
这是我用来列出它们的内容
$query = Self::select('data.id', 'data.created_at', 'data.type')
->whereNull('parent');
//If the user has declared a type, filter it by that type
if ($type)
{
$query->where('type', $type);
}
$query->with('children.metaData');
return $query->paginate($display);
这很好用,但是要在此过程中加入搜索功能...
if ($search)
{
$query->where(function($query) use ($search)
{
return $query->where('metaData.name', 'LIKE', '%' . $search . '%')
->orWhere('metaData.value', 'LIKE', '%' . $search . '%');
});
}
在返回查询之前,这是一个匿名酶功能。我收到了字段不存在的错误,但我认为即使存在,也仅适用于第二层到顶层数据。
我希望它可以对所有子项进行深入搜索,感谢您的帮助