我有一个名为books的表,希望在books视图中显示“相关图书”。
books table
`book_id`
`isbn`
`book_name`
`author_name`
`Date`
`number`
`language`
`Translator`
`abstract`
`picture`
`created_at`
控制器代码
public function actionView($id)
{
$model=$this->findModel($id);
$dataProvider=$this->related($model);
return $this->render('view', [
'model' => $model,
'dataProvider' => $dataProvider,
]);
}
protected function related($model)
{
$query = Books::find();
$query->select('book_id,picture, book_name,author_name,(( author_name LIKE \'%'.$model->author_name.'%\')+( book_name LIKE \'%'.$model->book_name.'%\')) as total')
->orFilterwhere(['or like','author_name' , explode(' ',$model->author_name)])
->orFilterwhere(['or like','book_name' , explode(' ',$model->book_name)])
->orderBy('total')
->limit(25);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
问题:书名 LIKE \'%'.$model->book_name.'%\'
未接受数组。像这样的 LIKE \'%'.explode(' ',$model->book_name).'%\'
它必须是一个数组才能正常工作。如何在选择条件下使用数组。或者告诉我其他的方法来获得最好的匹配结果。tnx公司
2条答案
按热度按时间mnowg1ta1#
首先,如果你想完全不需要写在选择条件
protected function related($model)
{
$query = Books::find();
$query->select('book_id,picture, book_name,author_name,(book_name+author_name) as total');
}
mwkjh3gx2#
您需要使用mysql match()against()特性(如果您使用的是不同的数据库,则使用替代项)。