我有一个 User 模型和一个 Organization 模型,该模型我想涉及另一个。

usersidcurrent_organization_id (外键)领域(除其他正常的字段)。

organizationsidowner_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');
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top