2016-09-18 5 views
0

Ich bin neu bei Laravel, und ich habe ein Problem, Beziehung mit Modell und Controller zu verwalten.Model und conroller Beziehung Laravel 5

Ich habe Indexcontroller, wo genannt:

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

Modell-Datei:

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; 
     } 

    } 

} 

Danach habe ich ein ein Fehler bekam:

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

Könnte jemand erklären, was ich falsch machen? Vielen Dank.

+1

Lassen Sie den Controller die Logik behandeln nicht das Modell –

+1

'scopes' kann nicht in boolean konvertiert werden,' scopes' müssen Builder zurückgeben – xAoc

Antwort

1

Proper Modell-Code ist:

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(); 
    } 

} 

Sie brauchen nicht Bereiche zu verwenden.

1

zuerst den Wert von Controller zurückgeben für überprüfen,

return $params['user_email'];  

Wenn Sie Antwort erhalten, versuchen Sie dann unten Codes folgen.

Sie brauchen nicht in die Modellfunktion zurückzukehren

Sie verwenden müssen,

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

in Modell verwenden nur,

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

oder Sie verwenden Zählung in Funktion , dann

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

Ich denke, das wird dir helfen.