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

标签 laravel eloquent

当 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/

相关文章:

php - 我如何在 Laravel 4 中制定此查询

php - Laravel 5.4 带有 Angular 变量误差

php - Laravel:循环中的 orWhere

mysql - 如何使用 Laravel Eloquent ORM 或查询生成器从 whereIn 子句中进行选择?

query-builder - Eloquent ORM、查询生成器和原始 SQL 查询之间的速度比较

php - Laravel- 在多个表中搜索一个 ID

php - Laravel 4 Form::open 设置 Action

php - 如何在 Dompdf laravel 5.5 中使用分页符?

php - 拉维尔 4 : Where Not Exists

php - Eloquent 模型批量更新