假设我有一个Laravel 4应用程序。我们还说我有一个填充的电影表。
此:
$movies = Movie::orderBy('title', 'ASC')->get();
返回:
Braveheart
Silent Hill
The Big Lebowski
Waterworld
我想要的是忽略排序中的“the”以返回:
The Big Lewbowski
Braveheart
Silent Hill
Waterworld
Laravel内部有什么可以让这件事变得容易吗?你会怎么做?我是否需要编写自定义SQL查询?
谢谢!
答案 0 :(得分:2)
祝你好日子
将结果存储在数组中。 循环遍历数组并删除所有'The'。
这样的事情:
$str = "The quick brown fox jumps over the lazy dog."
if(substr($str, 0, 4) = 'The ')
{
$str2 = substr($str, 4); // "quick brown fox jumps over the lazy dog."
}
从上面的内容创建一个新数组。
然后做这样的事情:
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}
?>
这将按字母顺序排序:
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
多数民众赞成
答案 1 :(得分:1)
不确定laravel 4的语法但在mysql查询中你可以使用REPLACE
REPLACE(column, 'search', 'replace')
SELECT * FROM `movies` ORDER BY REPLACE(`title`, 'The', '')
对于laravel 4希望如此有效但不确定
$movies = Movie::orderBy("REPLACE(`title`, 'The', '')", "ASC")->get();
编辑仅在字符串开头搜索“The”,您可以使用CASE
和LEFT
来检查“The”的外观
SELECT * FROM `movies` ORDER BY
CASE WHEN LEFT(`title`,4) ='The '
THEN REPLACE(`title`, 'The ', '')
ELSE `title`
END
$movies = Movie::orderBy("CASE WHEN LEFT(`title`,4) ='The '
THEN REPLACE(`title`, 'The ', '')
ELSE `title`
END", "ASC")->get();
答案 2 :(得分:1)
我对Laravel一无所知,但这个查询可能会做你想要的:
SELECT title
FROM movies
ORDER BY
CASE
WHEN SUBSTRING(title FROM 1 FOR 4) = 'The '
THEN SUBSTRING(title,5)
ELSE title
END DESC
引用REPLACE
函数的另一个答案也可能已经足够好了,但是注意REPLACE
将替换所有出现的目标字符串(例如“Gone With The Wind”将被更改。< / p>