【问题标题】:Laravel 4 / Eloquent ORM: Is it possible to obtain the object behind a relation?Laravel 4 / Eloquent ORM:是否可以获得关系背后的对象?
【发布时间】:2013-09-19 15:59:46
【问题描述】:

假设我有这两个类:

class User extends Eloquent
{
    public function phone()
    {
        return $this->hasMany('phone');
    }
}
class Phone extends Eloquent
{
    public function user()
    {
        return $this->belongsTo('user');
    }
}  

(关系不一定以这种方式呈现。)

我正在尝试通过使用accessors 来实现这一点:

class Phone extends Eloquent
{
    public function user()
    {
        return $this->belongsTo('user');
    }
    public function getNumberAttribute($value)
    {
        //Grant access to the User object who has this Phone.
        $userWhoOwnsThisPhoneNumber = /*SOMETHING*/;

        /*For example, $userWhoOwnsThisPhoneNumber->phone should return THIS phone object.  */
        //...

    }
}  

然后也许做这样的事情:

$user = User::find($id)->phone->number;

我多次浏览文档,我找不到任何有用的东西。是否有可能用 Laravel 4 做这样的事情?

【问题讨论】:

  • 您需要完成什么?我在您的代码中看不到任何错误,但是您需要关系背后的什么对象?
  • @AntonioCarlosRibeiro 我正在尝试通过访问器函数访问电话所属的特定用户(getNameAttribute

标签: php laravel laravel-4 eloquent


【解决方案1】:

因为您可能为每个用户拥有不止一部手机,所以您的关系应该是:

class User extends Eloquent
{
    public function phones() /// <--- this is just to be clearer
    {
        return $this->hasMany('phone');
    }
}

class Phone extends Eloquent
{
    public function user()
    {
        return $this->belongsTo('user');
    }
}  

而且您不需要任何访问者,除非您需要更改号码中的任何内容,因此您可以:

$user = User::find($id);
$phones = $user->phones;

foreach ($phones as $phone)
{
  echo $phone->user->name;
}

或者只是

foreach (User::find($id)->phones as $phone)
{
  echo $phone->user->name;
}

你也可以

$phone = Phone::where('number','555-5050')->first();
echo $phone->user->name;

【讨论】:

    猜你喜欢
    • 2013-05-14
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2013-09-27
    • 2015-04-16
    • 2015-04-04
    • 1970-01-01
    相关资源
    最近更新 更多