0

我不知道如何关联这两个表。

我是 Laravel 和 ORM 的新手,所以对我来说有点难。这是我要关联的两张表:

表 表被称为: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();

}

所以如你所见。我将值传递给发布,当我保存它时就可以了......但我无法将类别 ID 添加到另一个表......

我还创建了虚拟条目,并尝试获取 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
4

1 回答 1

0

好的,首先,您不必使用 PostCatagorie 作为您的模型名称。Laravel 有一个非常好的复数类,可以非常愉快地处理 Category 或 PostCategorie。此外,如果您只调用pc_idcategory_id(假设表名称为 category),则无需定义任何外键,这将使生活变得更简单,直到您掌握了基础知识。

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

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

这将允许您查看您正在尝试做的事情是否真正有效并查看结果对象的结构。

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

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

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

然后,您将能够访问您的类别对象,$post->Category并从那里访问它的任何属性,例如$post->Category->id

于 2013-10-29T11:25:00.453 回答