0

我正在使用 Laravel Translatables。但是当我执行时,我得到了一个像Call to a member function hasTranslation() on null. 这是我的代码。

<?php 
    if($slider->product->hasTranslation($locale))
    {
       $type = $slider->product->translate($locale)->product_name;
    }
    else{
       $type = $slider->product->translate('en')->product_name;
    } //echo $type; exit;

?>

$slider->product不为空且$locale具有值'en' 此代码昨天运行良好,我所做的唯一更改是,从管理面板中,我刚刚从添加产品字段中删除了所需的验证。

4

2 回答 2

2

检查您的关系设置$slider->product不为空

并且模型具有use Translatable特征

有一个名为 optional() 的辅助方法

optional($slider->product)->hasTranslation($locale)

此方法将避免引发异常。

不建议使用它(可选())如果 $slider->product 必须有一个值

只是干净代码的快捷方式

if(optional($slider->product)->hasTranslation($locale))
   $type = optional($slider->product)->translate($locale)->product_name;
else
   $type = optional($slider->product)->translate('en')->product_name;
于 2018-12-27T09:25:22.417 回答
0

我用另一个if条件解决了这个问题。修改后的代码是

<?php if(!empty($slider->product)) {

        if($slider->product->hasTranslation($locale))
        {
          $type = $slider->product->translate($locale)->product_name;
        }
        else{
          $type = $slider->product->translate('en')->product_name;
        }
    }
?>
于 2018-12-27T09:36:18.833 回答