【问题标题】:Laravel namespace in relations confused me关系中的 Laravel 命名空间让我感到困惑
【发布时间】:2015-02-28 14:52:03
【问题描述】:

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

活动

<?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');
    }

【问题讨论】:

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


    【解决方案1】:

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

    您可以将其导入到您的控制器中:

    use App\Models\Event;
    

    或者内联指定命名空间:

    new App\Models\Event();
    

    另外,如果您为模型创建命名空间,我建议您将所有模型都放入其中。 (User 在您的代码中缺少 namespace

    【讨论】:

    • 嗨@lukasgeiter,我已经将 use App\Models\Event; 放入了我将要使用的控制器中。
    • 如果在使用的时候指定命名空间呢? (我的第二个代码块)
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2011-12-14
    • 2011-07-17
    • 1970-01-01
    • 2019-11-19
    • 2020-11-13
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多