Laravel ORM问题

时间:2013-10-29 10:43:32

标签: php mysql orm laravel

我无法想象如何将这两个表联系起来。

我是Laravel和ORM的新手,所以对我来说很难。 这是我试图联系的两个表:

tables 表格称为:posts和post_categories 以下是一些代码:

class Post extends Eloquent {

public function categories()
{
    return $this->hasOne('PostCategorie');
    }
}

class PostCategorie extends Eloquent {
  protected $table = 'post_categories';

public function post()
{
    return $this->belongsTo('Post', 'pc_id');
    }
}


public function postCreate()
{
    $validator = Validator::make(Input::all(), Post::$rules);

    if ($validator->fails()) 
    {
        return Redirect::action('PostsController@getCreate')->withInput()->withErrors($validator);
    }
    // Else add to DB
    $categories = Input::get('categories');

    $post = new Post;
    $post->user_id = Auth::user()->id;
    $post->title   = Input::get('title');
    $post->text    = Input::get('text');
    $post->categories()->id_1 = $categories[0];
    $post->save();

}

如你所见。我将值传递给post,当我保存它时没问题...但是我无法将类别ID添加到另一个表...

我还创建了dummie条目,并试图获得Post Categories值:

Route::get('/', function()
{
    $post = Post::find(5);
    echo $post->title;
    echo $post->categories()->id_1;
});

但它失败了:

Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$id_1

1 个答案:

答案 0 :(得分:0)

首先确定首先,您不必使用PostCatagorie作为您的型号名称。 Laravel有一个非常好的复数课程,可以很愉快地处理Category或PostCategorie。另外,如果您只是调用pc_id category_id(假设类别的表名称),您将不必定义任何外键,这将使生活变得更简单,直到您掌握基础知识。

当您创建任何类型的对象(例如$ post)时,您可以使用dd($post);检查其关系是否附加,您可以进一步深入了解这些关系:

echo '<pre>';
print_r($post);
echo '</pre>;

这一起将允许您查看您尝试做的是否实际工作并查看结果对象的结构。

我不完全确定你的意思是“我不能将类别ID添加到另一个表格”,而你似乎正在保存数据......所以我会跳过那一点。如果您需要更多信息,请澄清问题。

一旦你建立了关系并获得了一些数据,你就必须像这样加载两个模型来获得具有附加关系的对象:

$post = Post::with('Category')->find(5);

然后,您就可以$post->Category访问您的类别对象,并从中获取其任何属性,例如$post->Category->id