雄辩者得不到“归属”.项


Eloquent doesn't get the "belongsTo" item

我有项目模型和合同模型。当我执行Project:all()时,它只给我没有合同的项目,合同也是如此。我试着在合约内部调用dd(),但没有做任何事情,就像从未执行过一样。我还尝试了App' prefix和不带。

use Illuminate'Database'Eloquent'Model;
class Project extends Model
{
    protected $table = 'project';
    public function contract() {
        return $this->belongsTo('Contract');
    }
}
namespace App;
use Illuminate'Database'Eloquent'Model;
class Contract extends Model
{
    protected $table = 'contract';
    public function project() {
         return $this->hasMany('Project', 'ContractID', 'ContractID');
    }
}

我试着像这样检索它们:

$projects = Project::all()->take(10);

你这里有几个问题。

  1. 项目::所有()-> (10);

这只返回一个项目集合。你还没有明确说你也想要合同呢。

$projects = Project::with('contract')->get();
  • 在你的belongsTo -你没有指定表应该连接的列。您需要这样做,因为您没有使用标准的id作为主键,contract_id作为外键。

  • 与具体问题无关,但你们在合同模型中的关系也是错误的。

    public function project() { return $this->hasMany('Project', 'ContractID', 'ContractID'); }

  • 如果一个合同有多个项目,那么你的public function project()应该是public function projects();

  • 最后-为什么使用非标准的表/列命名约定?contract_id怎么了?你知道mysql是不区分大小写的吗?此外,project表可以重命名为projects, contract表可以重命名为contracts。这将使你写你的雄辩的关系更容易,更有意义!
  • 如果您使用标准的命名约定,那么您可以这样声明您的模型关系。

    namespace App;
    use Illuminate'Database'Eloquent'Model;
    class Contract extends Model
    {
        public function projects() {
             return $this->hasMany('Project');
        }
    }
    

    请注意,您不需要在模型中指定表名,也不需要指定表与项目的关系。