2014-10-29 7 views
0

Я пытаюсь предварительно заполнить некоторые поля в форме, и я новичок в отношениях.Ошибка Laravel, когда hasOne ничего не имеет

Мой контроллер:

public function index($supplierId) { 
    $Supplier = new Supplier; 
    $supplierData = Supplier::find($supplierId); 
    $supplierData->countryId = ($supplierData->countryId == 0 ? 258 : $supplierData->countryId); 
    $supplierData->writtenLanguageId = ($supplierData->writtenLanguageId == 0 ? 1 : $supplierData->writtenLanguageId); 
    $supplierData->paymentTermsId = ($supplierData->paymentTermsId == 0 ? 5 : $supplierData->paymentTermsId); 
    $countries = Countries::lists('country', 'id'); 
    $languages = Languages::lists('language', 'id'); 
    $paymentTerms = PaymentTerms::lists('term', 'id'); 
    $leadTimes = Leadtimes::lists('leadtime', 'id'); 
    return View::make('supplier.supplier', array(
       'supplierData' => $supplierData, 
       'countries' => $countries, 
       'languages' => $languages, 
       'paymentsTerms' => $paymentTerms, 
       'leadtimes' => $leadTimes 
    )); 
} 

Моя модель:

class Supplier extends Eloquent { 
    protected $table = 'suppliers'; 

    public function email() { 
     return $this->hasOne('SupplierEmail', 'supplierId'); 
    } 

    public function creditLimits() { 
     return $this->hasOne('SupplierCreditLimits', 'supplierId'); 
    } 

    public function website() { 
     return $this->hasOne('SupplierWebsite', 'supplierId'); 
    } 
} 

Проблема:

<div class='col-xs-12 col-md-6'>{{Form::text('website', $supplierData->website->website, array('class' => 'form-control input-sm'))}}</div> 

Когда нет строки (нет записи), я получаю:

Trying to get property of non-object (View: C:\wamp\vhosts\view\laravel\app\views\supplier\supplier.blade.php) 

Как это сделать правильно?

+1

Что выглядит модель «SupplierWebsite» и каковы ее свойства? – Jerodev

+0

Если отношений нет, то у вас есть «null». – Amelia

ответ

1

На ваш взгляд, использовать isset проверить значение первого:

<div class='col-xs-12 col-md-6'> 
    {{Form::text('website', 
     isset($supplierData->website->website) ? $supplierData->website->website : '', 
     array('class' => 'form-control input-sm')) 
    }} 
</div> 

Или, еще лучше, справиться с этой логикой в ​​контроллере и передать результат к виду:

$supplierData->URL = isset($supplierData->website->website) ? $supplierData->website->website : ''; 
+0

Спасибо, мне просто интересно, использовал ли я правильный метод. Не думал просто использовать встроенный, если проверить на null :(. – imperium2335

Смежные вопросы