未定义的属性:stdClass,HasOne数据

时间:2019-06-07 13:36:23

标签: php laravel

我无法从数据库中获取HasOne数据。我能怎么做?

我可以得到其他数据。

控制器;

<table>
  <tr>
    <td>
      <span class="jdName">Some Name with more characters</span>
    </td>
  </tr>
</table>

<div class="test-div">
  <span class="jdName">Some Name with more characters</span>
</div>

用户模型;

$gelensunucu = Request::get('gelensunucu');
$gelenrol = Request::get('gelenrol');
$gelenkume = Request::get('gelenkume');

$veriler = DB::table('users')
    ->select(DB::raw("*"))
    ->where('kume_id', '=', $gelenkume)
    ->where('rol_id', '=', $gelenrol)
    ->where('sunucu_id', '=', $gelensunucu)
    ->get();

return view('home')->with('veriler', $veriler);

其他型号;

protected $fillable = [ 'sunucu_id', 'rol_id',  'kume_id', 'tecrube' ...]

    public function kumeler()
    {
        return $this->hasOne('App\kumeler','id','kume_id');
    }

    public function roller()
    {
        return $this->hasOne('App\roller','id','rol_id');
    }

    public function sunucular()
    {
        return $this->hasOne('App\sunucular','id','sunucu_id');
    }

  

未定义的属性:stdClass :: $ sunucular(0)

1 个答案:

答案 0 :(得分:0)

仅在使用模型`@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", visible = false) @JsonSubTypes(@JsonSubTypes.Type(value = Dog.class, name = "dog"))` 时才能访问关系。现在,您正在拨打以下电话:

User

此查询的结果是$veriler = DB::table('users')...->get(); 个对象的Collection,而不是stdClass个模型实例的Collection。因此,您不能调用类似User之类的东西,因为默认的$user->sunucular对象没有名为stdClass的属性/方法。要解决此问题,请使用您的sunucular模型

User

此外,请确保您的用户是在控制器中导入的属性:

$veriler = User::where('kume_id', '=', $gelenkume)
->where('rol_id', '=', $gelenrol)
->where('sunucu_id', '=', $gelensunucu)
->get();

// Note:: You don't need to call `->select(DB::raw("*"))`; it's redundant.

或通过名称空间访问:

user App\User;

无论哪种方式,现在您将拥有$veriler = \App\User::...->get(); 个模型实例中的Collection个,它们具有可用的关系。

总而言之,如果要访问关系,则不能使用User;它们是在DB::table()模型上定义的,需要以允许访问的方式进行查询。