雄辩的关系返回无法转换为字符串

时间:2018-06-06 19:06:53

标签: php laravel eloquent

我尝试使用Eloquent在laravel教程中将现有的一对一关系映射到我的数据库中,并且我收到了字符串转换错误。

我必须使用其他程序使用的现有数据库,因此我无法更改数据库结构。

这是我的模特:

  

Pessoa.php   

namespace App\Models;

use Illuminate\Support\Facades\Log; use
Illuminate\Database\Eloquent\Model;

class Pessoa extends Model {
    protected $table = 'pessoas';
    public function estadoCivil(){
        //return EstadoCivil::find($this->estado_civil_id);
        return $this->hasOne('App\Models\EstadoCivil', 'estado_civil_id');
    } 
}
     

EstadoCivil.php       命名空间App \ Models;

use Illuminate\Database\Eloquent\Model;
class EstadoCivil extends Model
{
    protected $table = 'estados_civis';
}

我不知道该怎么做,但我收到了这个错误:

"类Illuminate \ Database \ Eloquent \ Relations \ HasOne的对象无法转换为字符串"

我搜索了打字和其他错误并且找不到任何内容,我甚至没有尝试将任何内容转换为字符串来获取此错误,数据库中id和foreing键的类型是同样也是。

编辑1:

以下是使用它的控制器:

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Pessoa as Pessoa;

class Eu extends Controller
{
    public function __construct()
    {
    }

    public function dadosCompletos(Request $request){
        return Pessoa::find($request->user()->pessoa_id)->estadoCivil();
    }
}

如果我只使用返回Pessoa :: find($ request-> user() - > pessoa_id),它可以正常工作并从pessoas表中正确返回数据。

2 个答案:

答案 0 :(得分:3)

您要返回的关系不是实际的EstadoCivil集合。 使用不带括号的return Pessoa::find($request->user()->pessoa_id)->estadoCivil

答案 1 :(得分:0)

您必须使用->estadoCivil而不是->estadoCivil()