雄辩并没有得到" belongsTo"项目

时间:2015-10-08 08:42:10

标签: php laravel-5 eloquent

我有项目模型和合同模型。当我执行Project:all()时,它只获得没有合同的项目,合同相同。我尝试在合同中使用dd()并且没有做任何事情,就像从未执行过一样。我也试过App \前缀而没有。

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 个答案:

答案 0 :(得分:2)

这里有一些问题。

  1. 项目::所有() - >取(10);
  2. 这只返回一组项目。你还没有指定你也想要合同。

    $projects = Project::with('contract')->get();
    
    1. belongsTo中 - 您尚未指定表格应加入的列。您需要这样做,因为您没有使用标准id作为主键,contract_id作为外键。

    2. 与具体问题无关,但您在合同模型中的关系也是错误的。

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

    3. 如果一个合同有很多项目,那么您的public function project()应为public function projects();

      1. 最后 - 为什么使用非标准的表/列命名约定? contract_id有什么问题?你知道mysql是非区分大小写的吗?此外,project表可以重命名为projectscontract表可以重命名为contracts。它会让你更容易写出你的雄辩关系,更有意义!
      2. 如果您使用标准命名约定,那么您可以这样做来声明模型关系。

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

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