不同命名空间中的Laravel模型不支持急切/相关的加载

时间:2015-08-26 18:46:27

标签: php laravel laravel-5.1

当我在Laravel项目中为某些模型更改我的命名空间时,当我尝试加载相关模型时,它不再起作用。

当我在默认的命名空间中使用它时一切正常,但我想改变它 - 出于某些未提及的原因。

有人看到我做错了吗?看起来对我来说都很好......

<?php

# Foobar
namespace Hello\FoobarSheeps;

use Illuminate\Database\Eloquent\Model;

class Sheep extends Model
{
    protected $visible = ['name', 'is_alive'];

    public function farm()
    {
        return $this->belongsTo('Hello\FoobarSheeps\Farm');
    }
}

# Address
namespace Hello\FoobarSheeps;

use Illuminate\Database\Eloquent\Model;

class Farm extends Model
{
    protected $visible = ['city', 'latitude', 'longitude'];

    public function sheep()
    {
        return $this->hasOne('Hello\FoobarSheeps\Sheep');
    }
}

# Result
public function index()
{
    # Just returns the Sheeps, not the Farms..
    return \Hello\FoobarSheeps\Sheep::with('farm')->get();
}

索引的响应只是羊的名称和is_alive布尔值。不是与他们有关的农场。

2 个答案:

答案 0 :(得分:0)

您必须编辑文件composer.json并添加与项目中的文件夹对应的新命名空间,如下例所示:

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Hello\\FoobarSheeps\\": "folder_name/"
    }
},

然后,您必须使用终端中的以下命令更新项目:

composer update

答案 1 :(得分:0)

Sheep类需要在可见数组中使用“farm”:

class Sheep extends Model
{
    protected $visible = ['name', 'is_alive', 'farm'];