我创建了两个表,第一个是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?
答案 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
关系以获得良好衡量标准。