2016-07-15 5 views
0

は、ここで私はORDERBY私のデータベースで

を取得保管価格で

$service_plans = DB::table('service_plans') ->orderBy('price', 'asc') ->get(); 

をすべて、オーダーを照会しようとした私は

enter image description here

持っているものです

enter image description here

それとも私がここにはないと思われることは何ですか?

ヒント

P.S.私はjQuery DataTablesを使用しています。

+0

データベースの 'price'列のデータ型がどのようなものですか?また、DataTableを表示用に使用するのは偶然ではありませんか? –

+0

あなたの問い合わせの直後に 'dd($ service_plans)'を使い、出力を見てください。それがソートされていれば(それが私が期待している)、あなたはララベルが正しく行動していることを知っています。 – user3158900

+1

注文は動作しています....しかし、あなたのデータはintの代わりに文字列として取られているようです。 – Hackerman

答えて

3

Datatables jQueryプラグインを使用しているので、コントローラのクエリでorderByを削除してください。

代わりに、並べ替えを経由して(デフォルトではそうでしょう)のDataTable:

$('#datatable').DataTable({ 
    "order": [[ 2, "asc" ]] // Order on init. # is the column, starting at 0 
}); 

もデータを設定しますDataTableのためのちょっといいLaravelのパッケージがあります。それを確認して、それが役に立つかどうかを確認してください:

+0

私はそれが私のシナリオに従って最もクリーンな方法だと思う。 – ihue

+0

私はまだデータベース側を並べ替えるか、別のソリューションを使用する場合でも、サーバーサイドをまだソートしています。 ;) –

-2

プロパティをServicePlanモデルに追加できます。これにより、データベースのデータ型に関係なく、列が暗黙のデータ型として扱われます。

class ServicePlan extends Model 
{ 
    /** 
    * The attributes that should be casted to native types. 
    * 
    * @var array 
    */ 
    protected $casts = [ 
     'price' => 'integer', 
    ]; 
} 

https://laravel.com/docs/5.2/eloquent-mutators#attribute-casting

+1

問題は価格フィールドのデータ型にありません。 jQuery DataTablesは、デフォルトで最初の列でテーブルをソートします。詳細は、[answer by Mike Barwick](http://stackoverflow.com/a/38403431/3549014)を参照してください。 –

+0

が理にかなっています。これはラベールの問題ではありません - おそらくラベールのタグを削除する必要がありますか? – swatkins

+0

OPはLaravelを使用しているので、タグ 'laravel'が意味を持ちます。 [Mike Barwick](http://stackoverflow.com/a/38403431/3549014)LaravelがjQueryと連携する優れた[yajra/laravel-datatables](https://github.com/yajra/laravel-datatables)パッケージを提案しましたDataTables。 –

-2

価格フィールドのタイプはそうコンマの後に2つの数値の10進に変更した文字列です。 mysqlのコンソールで

ラン:

ALTER TABLE service_plans MODIFY price DECIMAL(10,2); 

!生産上のテーブルに変更を加える場合はALTER TABLEを呼び出す前に、あなたがテーブルのコピーをしたことを確認してください。

CREATE TABLE service_plans_bak AS SELECT * FROM service_plans; 
+1

彼はdatabtables jQueryプラグインを使用しています。与えられたオブジェクトに関係なく、自動的にデータをソートします(データテーブルの最初の列に基づいて)。 –

+2

問題は価格フィールドのデータ型にありません。 jQuery DataTablesは、デフォルトで最初の列でテーブルをソートします。詳細は、[answer by Mike Barwick](http://stackoverflow.com/a/38403431/3549014)を参照してください。 –

+0

@ Gyrocode.comタイトルで見る: "orderBy in Laravel"著者はソートに問題があると言って、作者はjQuery-Datatables(tag:datatablesしかない)を定義していないと言っていましたが、顧客が「私は1ページに200レコードは必要ありません」と言うと、サーバサイドはすでにソートされたページングされたデータを返さなければならないという考えに戻ります。 – num8er

関連する問題