我有User
模型和Organization
模型,我试图将它们相互关联。
users
表包含id
和current_organization_id
(外键)字段(在其他普通字段中)。
organizations
表包含id
和owner_id
(外键)字段(以及其他一些数据字段)。
还有一个数据透视表organization_user
,它通过各自的id
链接两者。
我的模型设置如下:
用户:
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends \Cartalyst\Sentry\Users\Eloquent\User implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
/**
* Defining many to many relationship to organizations
*/
public function organizations()
{
return $this->belongsToMany('Organization');
}
/**
* Defining relationship to current selected organization
*/
public function current_organization()
{
return $this->hasOne('Organization');
}
}
组织:
<?php
class Organization extends \Eloquent {
// Add your validation rules here
public static $rules = [
// 'title' => 'required'
];
// Don't forget to fill this array
protected $fillable = [];
public function users()
{
return $this->hasMany('User');
}
public function owner()
{
return $this->belongsTo('User');
}
}
这个想法是一个组织由一个用户拥有,但一个组织有很多用户,每个用户都有一个&#34;当前&#34;组织,他们可以从他们所属的任何组织中选择。
我遇到的问题是当我尝试$user->current_organization->id
时出现Trying to get property of non-object
错误,如果我尝试$user->current_organization()->id;
,我会得到Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$id
错误。
关于我做错什么的任何想法,我无法检索current_organization
,就像我试图做的那样?
编辑:
我认为这与我的hasOne
关系有关,但我尝试过这样做:
public function current_organization()
{
return $this->hasOne('Organization', 'id', 'current_organization_id');
}
仍然没有。 $user->current_organization;
正在返回NULL
。
答案 0 :(得分:2)
您需要为当前组织使用belongsTo
关系。
public function current_organization()
{
return $this->belongsTo('Organization', 'current_organization_id');
}
答案 1 :(得分:0)
经过大量的调试和搜索后,我遇到了this post这导致我遇到了真正的问题 - 函数名中的下划线。
从链接:
Eloquent docs提到“请记住,方法应该遵循 骆驼套管,即使你的数据库列是蛇形的。“所以我 相信函数名称应为“objectMinor()”。雄辩 实际上将蛇案例列名称转换为驼峰案例 方法名称。这有点令人困惑,但它符合要求 PHP命名约定。
所以,使用@Cryode的答案和上面的内容,我提出了:
public function currentOrganization()
{
return $this->belongsTo('Organization', 'current_organization_id');
}
可以通过以下方式调用:
$organization = $user->current_organization;
我认为他们应该让这更加明显。