如果在MySQL中找不到记录请求,则Eloquent返回第一行

时间:2017-10-24 11:14:32

标签: php mysql laravel eloquent

我正在使用Eloquent ORM创建应用程序,并且在选择数据库中的信息时遇到问题。

运行以下代码时:

public function index(){
    $user = Profile::select('idUser', 'userUrl', 'firstName')->where('userUrl', '=', $this->User)->orWhere('idUser', '=', $this->User)->first();
    if(!$user){
        echo "user not found";
    }else{
        echo "User found: ". $user['firstName'] . " - " . $user['userUrl'];
    }
}

如果存在,它会正确地将信息写入变量,但如果它不存在,则返回该表中记录的第一行。

我的桌子: My Table

请帮我解决一下!

谢谢!

3 个答案:

答案 0 :(得分:0)

代码看起来很好,我使用的代码很多次。

确保您的数据库记录不匹配,也许它正常工作,但您混淆了OR

你可以做到

$query = Profile::select('idUser', 'userUrl', 'firstName')->where('userUrl', '=', $this->User)->orWhere('idUser', '=', $this->User)->toSql();
dd($query);

检查查询是否正确。

答案 1 :(得分:0)

试试这个

public function index() {
    $user = Profile::select('idUser', 'userUrl', 'firstName')->where('userUrl', '=', $this->User)->orWhere('idUser', '=', $this->User);
    if(!$user = $user->first()){
        echo "user not found";
    }else{
        echo "User found: ". $user->firstName . " - " . $user->userUrl;
    }
} 

答案 2 :(得分:0)

我能够以一种我找不到合适的方式来解决它。 但它是一种完美的姑息,它遵循代码:

public function index(){
    echo "Página de " . $this->user . "<br/>";
    if(is_numeric($this->user)){
        settype($this->user, 'int');
        echo "Int <br/>";
        $user = Profile::select('idUser', 'userUrl', 'firstName')->where('idUser', '=', $this->user)->first();
    }
    if(is_string($this->user)){
        settype($this->Usuario, 'String');
        echo "String <br/>";
        $user = Profile::select('idUser', 'userUrl', 'firstName')->where('userUrl', '=', $this->user)->first();            
    }

    if($user == null){
        echo "User not found";
    }else{
        echo "Perfil de " . $user->firstName;
    }
}