插入一对一关系在Laravel5中不起作用


Inserting one to one relationship is not working in Laravel5

我有两个表:client和payment_term。我想保存客户表,同时保持与付款条件的关系。

我的模型类是:

class Client extends Model {
    public function payment_term() {
        return $this->hasOne('App'Model'PaymentTerm');
    }
}
class PaymentTerm extends Model {
    public function client() {
        return $this->hasOne('App'Model'client');
    }
}

我需要插入带有付款的客户端。下面给出了我的代码,但不起作用,

$client = new Client();
$client->name = Input::get('name');
$client->save();
//Payment term
$term = PaymentTerm::findOrFail(Input::get('term_id'));
$client->payment_term()->save($term);          
}

你能帮我解决这个问题吗?我已经看过文档和其他一些问题,但没有一个对我有效。我还想知道插入相关模型的最佳实践。

您的关系设置不正确。hasOne关系的补码是belongsTo关系。此外,它是包含位于belongsTo侧的外键字段的模型。

从代码来看,在我看来,你已经设置好了,这样客户端表就有了一个term_id字段(payment_term记录的外键)。如果是这样的话,你的关系应该是:

class Client extends Model {
    public function payment_term() {
        return $this->belongsTo('App'Model'PaymentTerm', 'term_id');
    }
}
class PaymentTerm extends Model {
    public function client() {
        return $this->hasOne('App'Model'Client', 'term_id');
    }
}

您可以在这里的文档中找到更多关于Laravel关系的信息。

我不确定,但我认为是您的$client->save()导致了这个问题。

尝试使用此代码代替-

$client = new Client();
$client->name = Input::get('name');
//Payment term
$term = PaymentTerm::findOrFail(Input::get('term_id'));
$term->client()->save($client);          

此外,您可能需要将App'Model'client更改为App'Model'Client

关于最佳实践,我认为文档中的代码示例可以帮助您—http://laravel.com/docs/5.0/eloquent#inserting-相关型号