php - Laravel ORM 问题

标签 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();

}

正如你所见。我将值传递给发布,当我保存时就可以了...但我无法将类别 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_idcategory_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/

相关文章:

PHP Laravel 检查数组是否为空

mysql - 如何使用vb将Combobox和checklistbox保存到mysql php中

mysql - SQL:选择 * where start and end falls within two dates

java - hibernate中的注解是什么?

orm - 为什么 ORM 被认为是好的但 "select *"被认为是坏的?

java - 在桌面应用程序中延迟加载 JPA 实体

php - 将 IDX MLS 集成到网站中

PHP preg_match_all 同一行

php - 将数组与数组组进行比较

javascript - PHP 关闭子窗口后刷新父窗口