23

採用テーブルからすべての行を選択し、それらをランダムな順序で表示するクエリがあります。

DB::table('hire_bikes')->order_by(\DB::raw('RAND()'))->get();

今入れたい

concat(SUBSTRING_INDEX(description, " ",25), "...") AS description

クエリのSELECT部分​​に追加してselect *、テーブルと簡単な説明から取得できるようにします。

生のクエリを実行することでこれが可能であることはわかっていますが、Fluentまたは少なくとも部分的なFluent(上記のように)を使用してこれを実行できることを望んでいました。

どうすればいいですか?

4

3 に答える 3

38

実際には、を使用ASせずにselectを使用できますDB::raw()select()次のように、配列をメソッドに渡すだけです。

$event = Events::select(['name AS title', 'description AS content'])->first();

// Or just pass multiple parameters

$event = Events::select('name AS title', 'description AS Content');

$event->title;
$event->content;

私はそれをテストしました。

また、DB:raw()クエリを使用して説明フィールドの連結を実行しないことをお勧めします。雄弁なモデルを使用している場合は、アクセサーとミューテーターを使用してこれを実行できるため、限定された説明が必要な場合は、ビューに出力するだけで、毎回同じクエリを使用して取得する必要はありません。限定的な説明。例えば:

class Book extends Eloquent
{
    public function getLimitedDescriptionAttribute()
    {
        return str_limit($this->attributes['description'], $limit = 100, $end = '...');
    }
}

あなたの見解では:

@foreach($books as $book)

    {{ $book->limited_description }}

@endforeach

出力例(制限するのは正確ではありません):

The description of this book is...

また、DBファサードは常にデフォルトの接続を利用するため、使用しないことをお勧めします。セカンダリ接続をクエリしている場合、次を使用してアクティブに指定しない限り、これは考慮されません。

DB::connection('secondary')->table('hire_bikes')->select(['name as title'])->get();

select AS(name AS title)を使用してモデルを更新する場合でも、データベース列と一致する適切な属性名を設定する必要があることに注意してください。

たとえば、title列がデータベーステーブルに存在しないため、これにより例外が発生します。

$event = Events::select('name AS title')->first();

$event->title = 'New name';

$event->save(); // Generates exception, 'title' column does not exist.
于 2014-09-08T14:13:32.290 に答える
23

DB::raw()これを行うには、流暢なクエリで選択した配列にを追加します。これをローカルでテストしましたが、正常に動作します。

DB::table('hire_bikes')
  ->select(
      array(
        'title',
        'url',
        'image',
        DB::raw('concat(SUBSTRING_INDEX(description, " ",25),"...") AS description'),
        'category'
      )
    )
  ->order_by(\DB::raw('RAND()'))
  ->get();
于 2013-01-24T13:11:19.467 に答える
0
select(array(DB::raw('latitude as lat'), DB::raw('longitude as lon')))
于 2014-09-03T09:53:41.530 に答える