Php Laravel 5.3 belongtomany不起作用
我必须处理我没有创建的表,这样它们就不会遵循Laravel的规则—没有ICR修订的主键,没有逻辑外键和本地键,等等。。以下是我的表格:用户、用户、作业和作业 我的数据透视表users\u jobs有一个复合键job\u引用和job\u节点。我知道Laravel不处理复合键,所以我在users\u jobs和jobs中添加了一个新的字段job\u key,它只是我的两个键连接在一起 在我的用户模型中,我有:Php Laravel 5.3 belongtomany不起作用,php,eloquent,foreign-key-relationship,laravel-5.3,Php,Eloquent,Foreign Key Relationship,Laravel 5.3,我必须处理我没有创建的表,这样它们就不会遵循Laravel的规则—没有ICR修订的主键,没有逻辑外键和本地键,等等。。以下是我的表格:用户、用户、作业和作业 我的数据透视表users\u jobs有一个复合键job\u引用和job\u节点。我知道Laravel不处理复合键,所以我在users\u jobs和jobs中添加了一个新的字段job\u key,它只是我的两个键连接在一起 在我的用户模型中,我有: public function jobs() { return $this->
public function jobs() {
return $this->belongsToMany('\App\Job', 'users_jobs', 'username', 'job_key');
}
它不返回任何结果
但当我尝试使用我的一个组合键时,它确实有效果。错误的,因为它只是两个键中的一个,但仍然有效
public function jobs() {
return $this->belongsToMany('\App\Job', 'users_jobs', 'username', 'job_reference');
}
知道我的新钥匙为什么坏了吗
编辑:
当我输出查询时,我有:
public function jobs() {
return $this->belongsToMany('\App\Job', 'users_jobs', 'username', 'job_key');
}
选择jobs.*,users\u jobs.username作为pivot\u username,users\u jobs.job\u key作为pivot\u job\u key from jobs internal jobs jobs jobs.id=users\u jobs.job\u key其中users\u jobs.username在
当然,它找不到任何东西,它使用id作为外键,而不是“作业”\u键
我再也不能用工作证明让它工作了。我知道我的代码中有错误,但我看不出是什么,这让我发疯……我在网络上发现了这种特性,它帮助我解决了几乎与您在这里遇到的问题相同的问题。看一看:
trait HasCompositePrimaryKey {
/**
* Get the value indicating whether the IDs are incrementing.
*
* @return bool
*/
public function getIncrementing() {
return false;
}
/**
* Set the keys for a save update query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
protected function setKeysForSaveQuery(Builder $query) {
foreach ($this->getKeyName() as $key) {
if ($this->$key)
$query->where($key, '=', $this->$key);
else
throw new Exception(__METHOD__ . 'Missing part of the primary key: ' . $key);
}
return $query;
}
}
在您的模型中使用它,如:
use Traits\HasCompositePrimaryKey;
protected $primaryKey = ["license_id", "trailer_id"];
这将重新定义使用id字段并让它接受数组的方法
我并没有真正检查这是否打破了雄辩的任何黑暗功能,但它在我的情况下工作得很好
希望有帮助 我在网上发现了这一特点,它帮助我解决了与你在这里遇到的几乎相同的问题。看一看:
trait HasCompositePrimaryKey {
/**
* Get the value indicating whether the IDs are incrementing.
*
* @return bool
*/
public function getIncrementing() {
return false;
}
/**
* Set the keys for a save update query.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
protected function setKeysForSaveQuery(Builder $query) {
foreach ($this->getKeyName() as $key) {
if ($this->$key)
$query->where($key, '=', $this->$key);
else
throw new Exception(__METHOD__ . 'Missing part of the primary key: ' . $key);
}
return $query;
}
}
class User extends Model{
protected $primaryKey = 'username';
public function jobs() {
return $this->belongsToMany('App\Job', 'users_jobs', 'username', 'username');
}
}
class Jobs extends Model{
protected $primaryKey = 'job_key';
public function users() {
return $this->belongsToMany('App\User', 'users_jobs', 'job_key', 'job_key');
}
}
在您的模型中使用它,如:
use Traits\HasCompositePrimaryKey;
protected $primaryKey = ["license_id", "trailer_id"];
这将重新定义使用id字段并让它接受数组的方法
我并没有真正检查这是否打破了雄辩的任何黑暗功能,但它在我的情况下工作得很好
希望有帮助 您可以发布表格的列吗?用户:id、用户名、姓氏、姓氏、电子邮件、生日等。用户作业:id、用户名、作业密钥、作业引用、作业节点、开始日期、结束日期、注释、默认值、操作作业:id、作业密钥、作业引用、作业节点、父节点、节点名称、活动、,用户中的用户名和作业中的作业密钥是否为主键?为了确定要检索的记录,我删除了列id,并将usersame和job_key设置为主键。现在我有一个错误SQLSTATE[42S22]:找不到列:1054未知列'jobs.id'在'on'子句'SQL:select。。。我从不在我的代码中调用id…如果在users\u jobs中,你也有一个job\u key列与用户的jobs和username相关,那么我的anwser应该可以工作。你可以发布表中的列吗?用户:id、username、lastname、firstname、email、birthdate等。用户\u jobs:id、username、job\u key、job\u reference、job\u node、startdate、enddate、comment、default、,操作作业:id、作业密钥、作业引用、作业节点、父节点、节点名称、活动等。用户中的用户名和作业中的作业密钥是主键吗?为了确定要检索的记录,我删除了列id,并将usersame和job_key设置为主键。现在我有一个错误SQLSTATE[42S22]:找不到列:1054未知列'jobs.id'在'on'子句'SQL:select。。。我从不在我的代码中调用id…如果在users\u jobs中,您也有job\u key列与jobs和users相关,我的anwser应该可以工作。我的查询现在是正确的!仍然没有结果,但我找到了原因。用户名是0000000009,在这个过程中它变成了9…当我在模型中将username设置为primearykey时,它改变了它:尝试使用受保护的$casts=['username'=>'string'];另外,您确定db中的列是同一类型的吗?我的查询现在是正确的!仍然没有结果,但我找到了原因。用户名是0000000009,在这个过程中它变成了9…当我在模型中将username设置为primearykey时,它改变了它:尝试使用受保护的$casts=['username'=>'string'];另外,你确定db中的列是同一类型的吗?太好了!只要我能让我的代码正常工作,我就会试试这个;哦,太好了!只要我能让我的代码正常工作,我就会试试这个;
class User extends Model{
protected $primaryKey = 'username';
public function jobs() {
return $this->belongsToMany('App\Job', 'users_jobs', 'username', 'username');
}
}
class Jobs extends Model{
protected $primaryKey = 'job_key';
public function users() {
return $this->belongsToMany('App\User', 'users_jobs', 'job_key', 'job_key');
}
}