2016-09-18 79 views
0

我是laravel的新手,我有一些問題來處理與模型和控制器的關係。Model and conroller relationship laravel 5

我的IndexController,其中被稱爲:

$usersModel = new \App\Models\Users(); 
if ($usersModel->checkOnExistsByEmail($params['user_email'])){ 
    //...find it 
} 

型號文件:

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Users extends Model { 
    protected $table = 'users_data'; 

    public function scopeCheckOnExistsByEmail($query,$email){ 

     $count = $query->where('user_email','=',$email)->count(); 
     if ($count == 0){ 
      return false; 
     }else{ 
      return true; 
     } 

    } 

} 

之後,我有一個一個錯誤:

Object of class Illuminate\Database\Eloquent\Builder could not be converted to string 

有人能解釋什麼我做錯了?非常感謝你。

+1

讓控制器處理邏輯而不是模型 –

+1

'scopes'不能轉換爲布爾型,'scopes'必須返回builder – xAoc

回答

1

合適的型號代碼:

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Users extends Model { 
    protected $table = 'users_data'; 

    public function checkOnExistsByEmail($email){ 
     return (bool)$this->where('email', $email)->first(); 
    } 

} 

你不需要使用範圍。

1

首先從控制器返回值進行驗證,

return $params['user_email'];  

如果你得到的答案,然後嘗試按照下面的代碼。

你並不需要在模型函數

您需要使用返回,

if(count($usersModel->checkOnExistsByEmail($params['user_email']) > 0)) { //.... } 

模型只使用,

$query->where('email', $email);   

或使用功能使用count ,然後

if($usersModel->checkOnExistsByEmail($params['user_email']) > 0) { //.... }   

我想,這會幫助你。