• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Eloquent-ORM-自定义-builder实现-findinset-查询

php 搞代码 3年前 (2022-03-01) 23次浏览 已收录 0个评论
文章目录[隐藏]

上篇文章其实曾经介绍了自定义 builder,可是举得了 page 例子不够失当,这次用自定义 builder 实现一下 MySQL 的 find_in_set() 查问。

find_in_set()

相熟 find_in_set 的同学间接跳至下一节。

find_in_set(str, list)

str 要搜寻的值
list 待搜寻列表,字符间以英文逗号分隔 eg: foo,bar,qux
返回 str 在 list 中的地位(从1开始),搜寻不到则返回0

例子:

select find_in_set('foo', 'foo,bar,qux'); // 返回1
select find_in_set('qux', 'foo,bar,qux'); // 返回3
select find_in_set('abc', 'foo,bar,qux'); // 返回0

当 find_in_set() 与 where 配合能达到“标签”搜寻的目标。如果文章表如下:

id title tag
1 This is an article title foo,bar,qux
2 This is another article title abc,def,foo

应用 where + find_in_set 能够查问带 foo 标签的文章。

select * from article where find_in_set('foo', `tag`);

自定义 builder 实现 find_in_set 查问

模型层父类继承 Eloquent Model ,在构造方法中利用 macro 注册自定义的 builder。示例代码如下:

class Model extends \Illuminate\Database\Eloquent\Model
{
    public function __construct(array $attributes = [])
    {
        /**
         * 自定义 builder
         */

        /**
         * findInSet() 办法
         * 参数: $field 字段 ;$value string 要查问的值
         * 应用办法:query链式调用
         */
        \Illuminate\Database\Query\Builder::macro('findInSet', function ($field, $value) {
            return $this->whereRaw("FIND_IN_SET(?, {$field})", $value);
        });

        parent::__construct($attributes);
    }
}

如何应用

Article::query()->findInSet('tag', 'foo');

Finished!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Eloquent-ORM-自定义-builder实现-findinset-查询

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址