关系中的Laravel命名空间让我很困惑

时间:2015-01-02 08:24:58

标签: php laravel-4 namespaces relationship laravel-facade

在我的应用程序中,我有事件和用户模型。因为事件模型我必须将它放入命名空间。所以我创建了名称空间,如下所示。

事件

<?php namespace App\Models;

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

用户

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use App\Models\Event;

class User extends Eloquent implements UserInterface, RemindableInterface {
   public function events()
   {
     return $this->hasMany('Event');
   }

User和Event之间的关系很简单OneToMany。所以在我的 EventController 中,我使用POST方法来创建新的事件资源。

$e = new Event(array('keys'=>'values')); //without user_id filled
$user->events()->save($e);

同时我收到了错误。

Call to undefined method Illuminate\Support\Facades\Event::newQuery()

如果我没有错,我猜它是命名空间错误。但我猜这些命名空间已经正确声明了。 但我尝试访问类似的问题,并在关系中使用替代方式,然后它工作正常。个人我不觉得它满意。任何想法为什么会发生这种情况?
将上述关系更改为

public function events()
    {
        return $this->hasMany('\App\Models\Event');
    }

1 个答案:

答案 0 :(得分:0)

如果您将Event放在命名空间中,则需要将其与其完全限定的类名一起使用。

您可以将其导入控制器:

use App\Models\Event;

或者指定命名空间内联:

new App\Models\Event();

此外,如果您为模型创建名称空间,我建议您将其全部放在那里。 (User在您的代码中遗漏了namespace