将MYSQL查询转换为Laravel方式

我必须将这些查询转换为Laravel方式。

$tqry = "select app_process,end_time,((end_time-".time().")/86400)as remain_day from BYAPPS_apps_data  where mem_id='$valu[mem_id]' limit 1";
                $tresult = $_DB->query($tqry);
                $tmp=$tresult->fetchRow();
                if($tmp[app_process]){
                    $status=$app_process[$tmp[app_process]];
                    if($tmp[app_process]==7&&($tmp[end_time]&&$tmp[remain_day]<=0)) $type="Expired";
                }else {
                    $tqry = "select app_process from BYAPPS_apps_order_data  where mem_id='$valu[mem_id]' order by idx desc limit 1";
                    $tresult = $_DB->query($tqry);
                    $tmp=$tresult->fetchRow();
                    if($tmp[app_process]) $status=$ord_process[$tmp[app_process]];
                    else $status="Not Customer";
                }

我通过这样的模型设置关系。

UserInfo模型


  public function order()
  {
    return $this->hasMany('App\AppsOrderData','mem_id');
  }

  public function apps()
  {
    return $this->hasMany('App\AppsData','mem_id');
  }

AppsOrderData模型(=>使用“ BYAPPS_apps_order_data”表)

public function userinfo()
  {
    return $this->belongsTo('App\UserInfo','mem_id');
  }

AppsData模型(=>使用“ BYAPPS_apps_data”表)

  public function payments()
  {
    return $this->hasMany('App\AppsPaymentData','mem_id');
  }

然后,我尝试像下面这样在UserInfoController.php中转换原始查询。

public function getUserInfoListData()
  {
    $userInfoListData = UserInfo::select('idx','mem_id','mem_nick','mem_name','cellno','ip','reg_date')
                                         ->with('order')
                                         ->with('apps');

    $orderProcess = array('Cancel','Order','Confirm Order','Developing','App Uploaded','Service end','Service expired','','Waiting');

    $appsOrderData = AppsOrderData::select('app_process','end_time');

    return Datatables::of($userInfoListData)
            ->setRowId(function($userInfoListData) {
                return $userInfoListData->idx;
            })
            ->editColumn('type',function($eloquent) use ($appsOrderData,$orderProcess) {
              if ($appsOrderData->app_process == 7 && $appsOrderData->end_time <= 0) {
                return "Expired";
              } else {
                return "No Customer";
              }
            })
            ->editColumn('term',function($eloquent) {
              return " (".$eloquent->launch_date." ~ ".now().")";
            })
            ->orderColumn('reg_date','reg_date $1')
            ->make(true);
  }

但是,它没有返回我所期望的,所有type数据都返回了'No Customer'。

如何将该查询转换为laravel方法?

我做错了关系吗?

chendian76 回答:将MYSQL查询转换为Laravel方式

我认为您在代码中犯了一些错误,

  • AppData模型没有用户关系。

  • 如果您使用get()方法来获取数据,则可以通过这种方式完成

    $ userInfoListData = UserInfo ::

    select('idx','mem_id','mem_nick','mem_name','cellno','ip','reg_date')
        ->with('order')
        ->with('apps')
        ->get();
    

有关更多参考,您可以使用此方法: Get Specific Columns Using “With()” Function in Laravel Eloquent

我希望这可以帮助您解决问题,谢谢!

本文链接:https://www.f2er.com/3154673.html

大家都在问