我正在关注此处的信息:
http://laravel.com/docs/eloquent#one-to-many
我有资产和尺寸表。
资产有多种尺寸。
所以在我的资产模型中我有:
class Asset extends Eloquent {
public function sizes()
{
return $this->hasMany('sizes');
}
}
但是当我这样做时:
Asset::find(1)->sizes;
我明白了:
Class 'sizes' not found
我哪里错了?
迁移是:
Schema::create('assets', function($table){
$table->increments('id');
$table->string('title');
});
Schema::create('sizes', function($table){
$table->increments('id');
$table->integer('asset_id')->unsigned();
$table->foreign('asset_id')->references('id')->on('assets');
$table->string('width');
});
我的类也是命名空间:
在我的控制器中:
<?php namespace BarkCorp\BarkApp\Lib;
use BarkCorp\BarkApp\Asset;
然后:
Asset::find(1)->sizes;
我的模特:
资产:
<?php namespace BarkCorp\BarkApp;
use \Illuminate\Database\Eloquent\Model as Eloquent;
class Asset extends Eloquent {
public function sizes()
{
return $this->hasMany('BarkCorp\BarkApp\Size');
}
}
尺寸:
<?php namespace BarkCorp\BarkApp;
use \Illuminate\Database\Eloquent\Model as Eloquent;
class Size extends Eloquent {
}
答案 0 :(得分:1)
您需要两者的模型,当您使用关系函数时,它将类名作为参数,而不是表的名称。函数名称可以是你想要的任何东西,所以你可以做任何有意义的事情。
class Size extends Eloquent {
// This is optional for what you need now but nice to have in case you need it later
public function asset()
{
return $this->belongsTo('Namespace\Asset');
}
}
class Asset extends Eloquent {
public function sizes()
{
return $this->hasMany('Namespace\Size');
}
}
命名空间=您Asset
模型上的命名空间。
$assetSizes = Namespace\Asset::find(1)->sizes;
或者您可以使用use
,因此每次要使用Asset
时都不需要添加命名空间。
use Namespace;
$assetSizes = Asset::find(1)->sizes;
或者你可以使用依赖注入。
public function __construct(Namespace\Asset $asset)
{
$this->asset = $asset;
}
$assetSize = $this->asset->find(1)->sizes;