【问题标题】:Laravel search in 2 models with one Query search in Model1 and check a status of Model2Laravel 在 2 个模型中搜索,在 Model1 中进行一个查询搜索并检查 Model2 的状态
【发布时间】:2014-02-05 17:37:20
【问题描述】:

我有两个模型:Trade 和 User 当我在贸易模型中搜索时,用户的状态(布尔)= 1 或 0 我要检查用户模型中的用户状态 = 1,并且仅显示此结果
模型\用户.php:

public function Trade()
    {
        return $this->hasMany('Trade', 'user_id')
            ->orderBy('created_at', 'desc');
    }

模型\Trade.php:

   public function User()
    {
        return $this->belongsTo('User', 'user_id');
    }

在 TradeController.php 函数中:

    public function getSearch()
        {       //League must be selected
            $query = Trade::where('league_id', '=', Input::get('league'))->with('User')->open();
            $query->where(function ($query) {
                //Check if Offer selected add clausel
                if ($orb1 = Input::get('orb1')) {
                    $query->where('orb1_id', '=', $orb1);
                }
                 //Check if I want to Buy Selecet add clausel
                if ($orb2 = Input::get('orb2')) {
                    $query->where('orb2_id', '=', $orb2);

                }

现在我有一个名为“在线”的复选框,如果选中此复选框我想获取用户状态 = 1 的所有交易

/******************************************************************************************************
//If Checkbox 'online' check get only results with Online Users (status = 1) in the Users Table
******************************************************************************************************/
            if (Input::get('online')) {
                $query->where('users.status', '=', 1);
            }
        });

函数的最后是check has query some results并将结果放到视图中:

     if ($query->count() > 0) {

            $trades = $query->paginate(40)->appends(array_except(Input::query(), Paginator::getPageName()));

            return View::make('trade.trade_table', compact('trades'));
        } else {   

            return Redirect::to('trades')->with('error', 'No Results found');

        }
    } 
}

这里贴一下:http://paste.pm/d4b.js

谢谢:D

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    我找到了一个不知道是否最好但有效的答案

     public function  getSearch()
        {
            $league_id = Input::get('league');
            $orb1_id = Input::get('orb1');
            $orb2_id = Input::get('orb2');
            $is_online = Input::get('online');
    
                    $query = DB::table('trades');
    
    
                $query->join('users', 'trades.user_id', '=', 'users.id');
                $query->where('trades.expires_at', '>', Carbon::now());
                $query->where('trades.league_id', '=', $league_id);
    
                $query->join('ladders', 'trades.league_id', '=', 'ladders.id');
    
                $query->select('trades.id',
                    'ladders.name',
                    'trades.user_id',
                    'trades.orb1',
                    'trades.orb2',
                    'trades.much1',
                    'trades.much2',
                    'trades.expires_at',
                    'trades.report',
                    'users.ingame',
                    'users.username',
                    'users.status');
    
                if ($orb1_id) {
                    $query->where('trades.orb1_id', '=', $orb1_id);
    
            }
            if ($orb2_id) {
                $query->where('trades.orb2_id', '=', $orb2_id);
    
            }
    
            if ($is_online) {
                $query->where('users.status', '=', 1);
    
            }
    
    
            $trades = $query->paginate(4)->appends(array_except(Input::query(), Paginator::getPageName()));
            return View::make('trade.results', compact('trades'));
    
        }
    

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 1970-01-01
      • 2015-04-17
      • 2018-05-06
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 2020-08-28
      • 2017-01-03
      相关资源
      最近更新 更多