gpt4 book ai didi

laravel eloquent 匹配多字表名时遇到问题

转载 作者:行者123 更新时间:2023-12-02 18:53:07 24 4
gpt4 key购买 nike

当 Eloquent 工作时,我非常喜欢它!但是这次我添加了一个带有两个单词名称的表,并且出现了一些我还没有看到的错误...

我已经有一个 Person 对象/人员表,其他实体已经具有一对多关系。现在我添加了可以多人播放的音频文件的概念。我为此添加了两个表:

  • audio_files(带有自动 ID、文件名、摘要、时间戳)
  • audio_file_person(带有自动 ID、audio_file_id 和 person_id)

然后我有 AudioFile.php:

class AudioFile extends Model
{
protected $fillable = [
'filename', 'summary', 'recording_date'
];

public function people()
{
return $this->belongsToMany('App\Person');
}

public function getPersonListAttribute()
{
return $this->people->lists('id')->all();
}

}

我已经用以下内容更新了 Person.php:

public function audio_files()
{
return $this->belongsToMany('App\AudioFile')->withTimestamps();
}

public function getAudioFileListAttribute()
{
return $this->audio_files->lists('id')->all();
}

使用与人们关联的其他记录相同的模式,在该人的 View 中,我检查是否有任何音频文件要显示:

@unless ($subject->audio_files->isEmpty())
<div>
<h4>Audio links: </h4>
@foreach($subject->audio_files as $audio)
@include ('audio.partials.audio_link', ['audio' => $audio])
@endforeach
<br/>
</div>
@endunless

但是,对于我确实有audio_file_person 记录的人来说,这似乎是空的。

关于我可能做错了什么或者我应该检查哪里有什么建议吗?预先感谢您的帮助!

最佳答案

尝试在belongsToMany关系中指示数据透视表。

在您的 Person 模型中:

public function audio_files()
{
return $this->belongsToMany(AudioFile::class, 'audio_file_person', 'person_id', 'audio_file_id');
}

在您的音频文件模型中:

public function people()
{
return $this->belongsToMany(Person::class, 'audio_file_person', 'audio_file_id', 'person_id');
}

对于audio_file_person 表,我通常不会在数据透视表上包含递增的id,但这实际上不会造成问题。

更新1:

在 View 中:

@foreach($people as $person)
{{$person->name}}: <br>
@unless ($person->audio_files->isEmpty())
<ul>
@foreach($person->audio_files as $audio_file)
<li>{{$audio_file->filename}}</li>
@endforeach
</ul>
@endunless
@endforeach

更新2:

在您的项目根目录中:

> php工匠修补匠
> 使用 App\Person (或 Person 模型的命名空间)
> $person = Person::find(1) (您在数据透视表中设置的 ID)
> $person->audio_files

关于laravel eloquent 匹配多字表名时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com