Php 建立雄辩关系的正确方法

Php 建立雄辩关系的正确方法,php,laravel-5.4,laravel-eloquent,Php,Laravel 5.4,Laravel Eloquent,我意识到这样的问题可能会让人困惑和难以理解,但我会尽可能详细地解释我的问题 我想做的:展示某个戏剧正在上演的所有日子 我拥有的内容:一个包含迄今为止执行的所有播放的表,以及一个包含所有日期的表(包括一个外键,该外键指向每行中关联的播放) 以下是我如何建立两者之间的关系: Days.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Days extends Model { publi

我意识到这样的问题可能会让人困惑和难以理解,但我会尽可能详细地解释我的问题

我想做的:展示某个戏剧正在上演的所有日子

我拥有的内容:一个包含迄今为止执行的所有播放的表,以及一个包含所有日期的表(包括一个外键,该外键指向每行中关联的播放)

以下是我如何建立两者之间的关系:

Days.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Days extends Model
{
    public function play()
    {
        return $this->belongsTo('App\Plays', 'play_id');
    }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Plays extends Model
{
    public function days()
    {
        return $this->hasMany('App\Days');
    }
}

将类名更改为单数名词(Play,Day)或在hasMany关系中指定外键。Laravel试图从类名中猜出外键名,在这种情况下,它试图通过plays_id key查找天数。

将类名更改为单数名词(Play,Day)或在hasMany relation中指定外键。Laravel尝试从类名猜测外键名,在这种情况下,它尝试通过plays_id key查找天数。

一旦定义了关系,我们可以使用Eloquent的动态属性检索相关记录。
尝试$play->days而不是$play->days()循环中的一旦定义了关系,我们就可以使用Eloquent的动态属性检索相关记录。
尝试$play->days而不是$play->days()在循环中

最后,结果是sahed和Dmitri的答案的组合:

我指定了在两个模型中使用哪个外键,因为在我使用它们的任何位置重命名它们都需要非常非常长的时间:

播放模型

public function days()
{
    return $this->hasMany('App\Days', 'play_id');
}
public function play()
{
        return $this->belongsTo('App\Plays', 'play_id');
}
天模式

public function days()
{
    return $this->hasMany('App\Days', 'play_id');
}
public function play()
{
        return $this->belongsTo('App\Plays', 'play_id');
}
以前,我只做了几天,但显然这两种方法都需要


另外,移除支架修复了最后几个问题,所以谢谢大家

最后,结果是sahed和Dmitri的答案的结合:

我指定了在两个模型中使用哪个外键,因为在我使用它们的任何位置重命名它们都需要非常非常长的时间:

播放模型

public function days()
{
    return $this->hasMany('App\Days', 'play_id');
}
public function play()
{
        return $this->belongsTo('App\Plays', 'play_id');
}
天模式

public function days()
{
    return $this->hasMany('App\Days', 'play_id');
}
public function play()
{
        return $this->belongsTo('App\Plays', 'play_id');
}
以前,我只做了几天,但显然这两种方法都需要

另外,移除支架修复了最后几个问题,所以谢谢大家