我有项目模型和合同模型。当我执行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);
答案 0 :(得分:2)
这里有一些问题。
这只返回一组项目。你还没有指定你也想要合同。
$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');
}
}
请注意,您不需要在模型中指定表名,也不需要指定表与项目的关系。