【问题标题】:Relationship hasone trying to get property of non-object关系已经试图获得非对象的属性
【发布时间】:2016-10-27 10:36:45
【问题描述】:

我遇到了编辑和更新条件的一对一关系机制的问题,所以我有模型 Siswa 和 Telepon,Telepon 属于 Siswa...这是代码

Siswa.php(模型)

class Siswa extends Model
{
protected $table = 'siswa';

protected $fillable = [
    'nisn',
    'nama_siswa',
    'tgl_lahir',
    'jns_klmin'
];

protected $dates = ['tgl_lahir'];

public function getNamaSiswaAttribute($nama_siswa){
    return ucwords($nama_siswa);
}

public function setNamaSiswaAttribute($nama_siswa){
    $this->attributes['nama_siswa']=ucwords($nama_siswa);
}

public function telepon(){
    return $this->hasOne('App\Telepon', 'id_siswa');
}
}

Telepon.php(模型)

class Telepon extends Model
{
protected $table = 'telepon';

protected $primKey = 'id_siswa';

protected $fillable = [
    'id_siswa',
    'no_telepon',
];

public function siswa(){
    return $this->belongsTo('App\Siswa', 'id_siswa');
}
}

编辑和更新功能控制器如下所示:

public function edit($id){
    $siswa = Siswa::findOrFail($id);
    $siswa->no_telepon = $siswa->telepon->no_telepon;
    return view('siswa.edit', compact('siswa'));
}

public function update(Request $request, $id){
    $siswa = Siswa::findOrFail($id);
    $input = $request->all();

    $validator = Validator::make($input, [
        'nisn'=>'required|string|size:4|unique:siswa,nisn,'.$request->input('id'),
        'nama_siswa'=>'required|string|max:30', 
        'tgl_lahir'=>'required|date',
        'jns_klmin'=>'required|in:L,P',
        'no_telepon'=>'sometimes|numeric|digits_between:10,15|unique:telepon,no_telepon,'.$request->input('id').',id_siswa',
    ]);

    if ($validator->fails()) {
        return redirect('siswa/'.$id.'/edit')->withInput()->withErrors($validator);
    }

    $siswa->update($request->all());

    $telepon = $siswa->telepon;
    $telepon->no_telepon = $request->input('no_telepon');
    $siswa->telepon()->save($telepon);

    return redirect('siswa');
}

我在编辑函数中尝试获取非对象属性错误,行“$siswa->no_telepon = $siswa->telepon->no_telepon;”。

当我们在编辑控制器中调用编辑视图时,它会给出一个表单,里面有以前保存的数据。 no_telepon 本身是 Telepon 表中的一列,而不是 Siswa,因此如何显示电话保存的数据以进行编辑是问题所在。仅供参考,创建工作正常,并且 no_telepon 数据保存在 Telepon 表中。那么,这个呢?任何帮助表示赞赏。

【问题讨论】:

    标签: laravel foreign-key-relationship one-to-one table-relationships


    【解决方案1】:

    这可能是因为您在数据库中没有任何'App\Telepon' 'id_siswa' 指向表siswa 中记录的ID。

    你可以这样省略这个错误:

    public function edit($id){
        $siswa = Siswa::findOrFail($id);
        $siswa->no_telepon = $siswa->telepon ? $siswa->telepon->no_telepon : '';
        return view('siswa.edit', compact('siswa'));
    }
    

    【讨论】:

    • 视图有效,当然电话形式是空的……不像其他的。那么如何添加这个 App\Telepon?顺便说一句,我已经将它添加到我的控制器中,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多