Laravel模型的多种关系不如预期
题
我有一个 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');
}
}
这个想法是,一个组织所拥有的一个用户,而是一个组织中有许多用户,而且每个用户都有一个"当前"的组织,它们可以从中选择的任何组织属于他们。
这问题我跑到的是,当我试着做 $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
.
解决方案 2
经过调试和检索,我碰到 这个职位 这导致我真正的问题--所强调的功能名称。
从链接:
雄辩的文档说"请牢记,应该遵循的方法 骆驼外壳,即使数据库列蛇的情况。" 所以我 相信的功能,名称应该是"objectMinor()".雄辩 实际上转换蛇情况的列名骑骆驼情况 方法的名称。这是一个有点令人混淆,但这不符合 PHP命名约定。
因此,使用@Cryode答复以及上述,我想出了:
public function currentOrganization()
{
return $this->belongsTo('Organization', 'current_organization_id');
}
这可以被称为通过:
$organization = $user->current_organization;
我认为他们真的应该让这更加显而易见的。
其他提示
你会想要使用 belongsTo
关于目前的组织。
public function current_organization()
{
return $this->belongsTo('Organization', 'current_organization_id');
}