在laravel中,如果我们定义了hasMany()关系但没有定义belongsTo()关系会发生什么?

ffx8fchx  于 2023-03-19  发布在  其他
关注(0)|答案(3)|浏览(197)

我认为(我真的不知道,如果我错了,请纠正我),这实际上是媒体表和其他表(用户,消息,帖子)之间的多对多关系。
因此,我创建名为Media_links的中间表来连接这些表之间的多对多关系。
我想为Medias表定义hasMany()关系,但不想定义它的belongsTo()关系。
我还没有尝试任何东西。发布这个帖子只是为了先得到一些见解。

oprakyz7

oprakyz71#

并且belongsTo是一个one-to-many,而不是many-to-many
关于你的问题,你可以在任何定义它的地方访问关系,但除非你定义它,否则不能访问逆关系!
例如,如果您有教师和学生模型

教师模型

use Illuminate\Database\Eloquent\Relations\HasMany;

class Teacher extends Model {

    public function students(): HasMany {
        return $this->hasMany(Student::class);
    }
}

学生模型

use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Student extends Model {

    //Relation below not define.
    /* public function teacher(): BelongsTo {
        return $this->belongsTo(Teacher::class);
    } */
}

//each line below works fine, you can perform relationship related query 
$teacher->students()->create([...]); // create students relation
$teacher->students; //lazy load students relation
Teacher::with('students')->paginate(); //eager load students relation

//each line below will throw 500 error as Inverse relation is not define 
$student->teacher()->create([...]); // create teacher relation
$student->teacher; //lazy load teacher relation
Student::with('teacher')->paginate(); //eager load teacher relation
c90pui9n

c90pui9n2#

应用程序实际上并没有发生什么变化,只是如果您要访问透视表,您将无法从它调用任何关系。

eaf3rand

eaf3rand3#

如果你正在创建透视表,你应该创建一个belongsToMany关系,它为你提供sync(),attach()方法。否则你可以简单地创建hasMany关系。你实际上在尝试做什么?

相关问题