【发布时间】:2021-05-29 18:14:03
【问题描述】:
我在 Laravel 8 中有一个项目,在这个项目中,movies 和 imdbs 表之间存在 一对一 关系。
所以我已将这些添加到模型中:
Movie.php:
public function imdb()
{
return $this->hasOne(Imdb::class);
}
Imdb.php:
public function movie()
{
return $this->belongsTo(Movie::class);
}
然后我创建了一个用于添加电影的表单。这是store 方法:
public function store(Request $request)
{
$new = new Movie();
$new->name = $request->name;
$new->link = $request->link;
$new->year = $request->year;
$new->actor = $request->actor;
$new->director = $request->director;
$new->imdb = $request->imdb;
$new->starred = $request->starred;
$new->watched = $request->watched;
$new->save();
}
如您所见,$new->imdb = $request->imdb; 用于插入 imdb 速率,但此数据应添加到 imdbs 表而不是 movies 表!
那么,我该怎么做呢?
这里也是imdbs表迁移:
public function up()
{
Schema::create('imdbs', function (Blueprint $table) {
$table->id();
$table->string('rate');
$table->integer('movie_id')->unsigned();
$table->timestamps();
});
}
更新 1
@foreach($movies as $movie)
<tr>
<th scope="row">{{ $movie->id }}</th>
<td>{{ $movie->name }}</td>
<td>{{ $movie->year }}</td>
<td>@mdo</td>
<td>Mark</td>
<td>{{ $movie->imdb->rate }}</td>
<td>@mdo</td
<td><a href="">Edit</a> | <a href="">Delete</a></td>
</tr>
@endforeach
然后这给了我:
ErrorException试图获取非对象的属性“率”
而$movies 就是来自这个方法:
public function index()
{
$movies = Movie::all();
return view('admin.movies.index', compact(['movies']));
}
【问题讨论】:
-
您应该在 imdbs 表中添加一个新行,然后
$new->imdb应该是$new->imdb_id吗?在电影上重命名列 -
@Ballard 你能解释更多作为答案吗
-
我的错误我没有在 imdb 表上看到你的 movie_id
-
你可以通过尝试我的回答来减少你的代码@KKKKKK
-
谢谢你的回答,但是当我想得到这样的电影速率时:
{{ $movie->imdb->rate }},我得到Trying to get property 'rate' of non-object错误!