我不知道如何关联这两个表。
我是 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 添加到另一个表...
我还创建了虚拟条目,并尝试获取帖子类别值:
Route::get('/', function()
{
$post = Post::find(5);
echo $post->title;
echo $post->categories()->id_1;
});
但是失败了:
Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$id_1
最佳答案
首先,您不必使用 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->类别->id
关于php - Laravel ORM 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655946/