Laravel 4 с использованием построителя запросов для строковой функции LEFT() mysql

Мне интересно, как создать строковую функцию LEFT() с помощью построителя запросов Laravel. Это то, к чему я иду, и что возвращает мне правильные результаты.

версия MySQL

SELECT id, title, LEFT(body, 141) AS body FROM posts

попытка построителя запросов

$posts = Post::select('title', 'id', DB::raw('left("body", 141)'))->orderBy('created_at')->get(3);

Я не вижу никаких ошибок и могу использовать {{ $post->title }}, но когда я пытаюсь использовать {{ $post->body }}, то ничего не вижу.


person Mitch    schedule 04.02.2014    source источник
comment
Вы не присвоили своей левой функции псевдоним body в построителе запросов.   -  person Brian Glaz    schedule 04.02.2014
comment
Спасибо @BrianGlaz, теперь все работает.   -  person Mitch    schedule 04.02.2014


Ответы (1)


Похоже, что нет необходимости отвечать на вопрос, но что касается ситуации здесь, вы пытаетесь получить отрывок, похожий на содержимое из поля, что означает, что вы хотите получить только 141 символов из поля body, и хотя это сработает, но вам нужно настроить это потому, что функция LEFT вернет ровно 141 символа, и он может оказаться (последним символом) в середине слова, такого как hel..., где слово hello, а 141th символ l, поэтому для отображения отрывка оно должно быть полным словом. и Laravel имеет встроенное решение для этого, используя метод Str::words(), вы можете указать, сколько полных слов показывать, поэтому я думаю, вы также можете использовать это:

Str::words($post->body, 30); // show first 30 words from the $post->body

По умолчанию: words($value, $words = 100, $end = '...')

Str::words($post->body)

Это выведет первые 100 полных слов из любого текста, и оно закончится на ..., поэтому, например, если hello является последним словом, оно будет заканчиваться как hello....

person The Alpha    schedule 04.02.2014
comment
Спасибо @SheikhHerra, я не знал об этом :) - person Mitch; 04.02.2014