2016-11-20 10 views
2

ケース:Laravel - リスト外の予約や利用可能なテーブルを

私はレストランのプロジェクトに取り組んでいますし、予約済みのテーブルやビューで使用可能なテーブルを一覧表示しようとしています。特定の日時にすべての予約済みテーブルを一覧表示できますが、予約されていない残りのテーブルを一覧表示することはできません。

http://sqlfiddle.com/#!9/208543/2 

とResturantのテーブルテーブル:

http://sqlfiddle.com/#!9/7db56/1 

Laravelコード

I

私はこのような順序テーブルを有しています

$reserved = Order::where('date',$request->input('date')) 
       ->orWhere('time', $request->input('time')) 
       ->leftJoin('tables', 'ref_tableID', '=', 'tables.tableID') 
       ->get(); 

このコードは正常に動作しますが、私は、たとえばしようとしたときに=
それが機能していない事業​​者を変更するには:すべての予約表を一覧表示するために、次のコードを持っています!。

モデル

表モデル:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Table extends Model 
{ 
    protected $fillable = ['tableID','number','description','status','capacity']; 

     public function orders(){ 
      return $this->hasMany(App\Order); 
     } 
} 

受注テーブル:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Order extends Model 
{ 
    protected $fillable = ['orderID','time','date','personID','cartID','foodID','drinkID','tableID']; 

    public function tables(){ 
     return $this->hasOne('App\Table'); 
    } 

} 

誰かが予約されていない残りの表をリストアップ私を助けてくださいことはできますか?

+0

*テーブル予約*を表していますか?注文記録? – snh

+0

テーブル名とカラム名、つまり「id」という名前のプライマリキーと「snake_case」(つまり 'cart_id')という表記規則に従います。 Eloquentのモデルや関係を使って作業すると、あなたの人生が楽になります。 –

答えて

0

私が正しく理解しているのは、注文が予約されている注文を持たないレコードです。その場合は、doesntHaveメソッドを使用することになります。

リザベーションテーブルを定義するもの、リレーションシップを直接使用するのではなく、手動でリレーションシップを残すのはなぜですか?このメソッドはリレーションレコードを持たないレコードを検索するために適用されます、これをあなたのロジックに適用してみてください。

$available_tables = Table::doesntHave('orders')->get();

またはあなたのニーズに、より具体的な何か:

$available_tables = Order::doesntHave('tables') 
         ->where('date',$request->input('date')) 
         ->orWhere('time', $request->input('time')) 
         ->get(); 
+0

迅速な返信に感謝します。私は、私の説明がコピー貼り付けのために間違っていたときに特に混乱していたことに気付きました。とにかく私はあなたのdoesntHaveの提案を読み上げることができ、私の問題は解決されました! – user2925977