我的解决方案:
$author_id = 25;
$sql = "SELECT DISTINCT author_id AS label
FROM users
WHERE author_id ::text LIKE '%:term%' AND role = 'Editor'";
$query = Users::findbysql($sql, [ ':term' => $author_id ] )->all();
问题出在标签别名上,然后标签别名失败,并显示:author_id ::text LIKE '%:term%'
3条答案
按热度按时间cygmwpex1#
SQL
concat()
连接字符串。您应该使用
':term'
来提供字串。bvjxkvbb2#
尝试使用concat管理类似字符串的参数
如果模型中没有字段
label
,则在用户类中添加pubblic var$label
6ju8rftf3#
因此,如果要使用查询构建器,它应该像这样:
请注意@ScaisEdge关于将
label
属性添加到Users
ActiveRecord类的回答。由于模式检查,所有表列值都可以通过神奇方法获得。模式中没有出现但在查询结果中声明的键名,您应该在目标ActiveRecord类中使用set<KeyName>()
方法将其定义为公共属性或私有/受保护属性。另一种方法是使用查询的数组结果而不创建对象。它通过在
->all()
方法执行之前将->asArray()
添加到调用链中来实现。