Laravel非常新,试图使用例子,但没有去

时间:2014-01-15 23:16:15

标签: laravel laravel-4

我认为这将是hasMany和belongsTo的简单用法,但我没有获取其中一个表的数据,即title。

我有两张桌子:

scenes  ( movie scenes basically)
------
int scene_id  (can't change to "id".. this is at my company)
string scene_name

int title_id


titles  (movie dvd titles)
------
int title_id    ( same here.. should be id, but it's not )
string title_name
string title_description

“场景”表中有多个场景,具有相同的title_id,正如您可能猜到的那样。

到目前为止,我有:

class Title extends Eloquent {
    protected $table = 'titles';
    protected $primaryKey = "title_id";

    public function scenes() {

        return $this->hasMany('Scene','title_id','title_id');

    }

}

class Scene extends Eloquent {
    protected $table = 'scenes';
    protected $primaryKey = "scene_id";

    public function title() {

        return $this->belongsTo('Title', 'title_id', 'title_id');
    }
}

我看起来很奇怪,我必须为title()和scenes()成员函数指定title_id ..但是该字段是将每个标题与其多个场景连接起来的。

我为获得一个场景而进行的调用(假设$ scene_id是一个int)以及每个场景的标题信息是:

$scene_info = Scene::find($scene_id)->title(); 

如果我在$ scene_info上执行var_dump,我会得到一个很多的Laravel代码,我猜我不应该这样。
我也收到了场景信息,但标题信息是空白的。

只是想知道我的Laravel编码是否有任何关闭

史蒂夫

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

$scene_info = Scene::with('title')->find($scene_id); 

或者你可以在获得场景后懒惰加载关系:

$scene_info = Scene::find($scene_id); 

$scene_info->load('title');

答案 1 :(得分:0)

终于找到了获取标题信息所需的内容:

所以它是:

$info = Scene::with('title')->find($scene_id); (thanks to Anam)

// to get scene info
$scene_array = $info->getAttributes();

// to get title info
$title_array = $info->getRelations();

你认为,如果你已经在第一次调用时指定了“('title')”,那么调用getRelations()对于获取标题信息是不必要的。

无论如何,再次感谢你们的帮助。