结果为null

时间:2016-04-30 15:10:39

标签: php sqlite laravel laravel-5

我创建了两个表,第一个是Posts表,秒是Comments表。 我正在使用sqlite数据库。

我在Post Model中使用hasMany方法获得注释函数的结果为null。

帖子表转移文件:

    class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('Posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('Posts');
    }
}

评论表迁移文件:

 class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
{
    Schema::create('Comments', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('post_id')->unsigned()->index();
        $table->text('body');
        $table->timestamps();
    });
        Schema::table('Comments', function (Blueprint $table) {
            $table->foreign('post_id')->refrences('id')->on('Posts');
        });
}


/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('Comments');
}
}

发布模型:

class Post extends Model
{

    //
    public function comment(){
    return $this->hasMany(Comment::class);    
   //I have also tried: return $this->hasMany(Comment::class,'post_id','id');
    }
}

数据已输入两个表格,我在

时获得结果
$post=new App\Post;
$post->get();

但是当我尝试使用

获取帖子的所有评论时
$post->comment;

我正在

=>Illuminate\Database\Eloquent\Collection {#633
all:[],
}

为什么我的结果是null?

1 个答案:

答案 0 :(得分:0)

你不是。你得到一个空的Collection对象。这意味着您找到的帖子没有结果。

您可以执行$post->comment->count() === 0并获得真实。

您的关系出现错误。你说你尝试了别的东西;通过文档来看,这看起来更正确 https://laravel.com/docs/5.0/eloquent

return $this->hasMany('App\Comment', 'foreign_key', 'local_key');

有了这个,如果你仍然得到一个空集作为返回,我鼓励你安装Laravel调试栏并检查正在运行的原始SQL。您的数据不正确或者您的帖子中没有解释某些问题。

修改:您还可以尝试在评价中设置belongsTo关系以获得良好衡量标准。