2016-08-10 16 views
0

私のライブ環境への最近のアップデートの後、大文字と小文字を区別しないモデル名についていくつかのエラーがありましたが、さて、このアップデートの約1週間後、私は突然、関連オブジェクトにアクセスしようとしている間に "非オブジェクトのプロパティ"に関するエラーを受け取ります。ここ は私のモデルです:Laravel:奇妙な関係が突然動作を停止しました

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class products extends Model { 
    /** 
    * The table associated with the model. 
    * 
    * @var string 
    */ 
    protected $table = 'v_products_2'; 
} 

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class order extends Model { 
    /** 
    * The table associated with the model. 
    * 
    * @var string 
    */ 
    protected $table = 'v_customers_orders'; 

    public function getProduct(){ 
     return $this->belongsTo('App\products', 'product_id', 'product_id'); 
    } 
} 

私が正しくセットアップ私のルートやミドルウェアをしましたし、このようにプロパティにアクセスしようとした後、「非オブジェクト」エラーになります:

echo $orders->getProduct->product_id; 

しかし、この正確に同じコードは2時間前と同じように働き、今数ヶ月間働いています。それを除いて、このコードは私のWindows Homestead環境でも動作し、トラブルシューティングを非常に難しくしています。このエラーをローカルで再現できる唯一の方法は、モデルからgetProduct関数を削除することでした。しかし、ライブでは、私はどちらの場合も同じ動作をします。

+0

製品モデルでHasManyリレーションを実行する必要があるかもしれません。それがクリアされるかどうかを確認してください –

+0

クエリをhasManyに変換しようとすると、私のローカル環境でDB全体をダウンロードしてインポートすると、エラー。これはDBの問題です。正確な原因は何か – m33ts4k0z

+2

私はこのトピックを議論の対象外としています。なぜなら、プログラミングではなく、データベースに関するものだからです。 [データベースの質問](dba.stackexchange.com)用の別のSEサイトがあります。 –

答えて

1

問題は、注文テーブルに商品テーブルから削除された商品のエントリがいくつかあることでした。その結果、オブジェクトの代わりに配列が返されました。問題のある行を削除/編集すると、以前と同じようにコードが再現されました。

+0

あなたはあなたを揺する!正直言って本当に助けになったあなたの答えに感謝します。 – unknown

1

クラス名を最初の文字の大文字に変更し、次にApp\Productsの関係に変更してください。

+0

私はいくつかの進歩を遂げました...配列[キー]値にアクセスできますが、オブジェクトとしてアクセスすることはできません。これはうまくいきます:$ order-> getProduct-> carrier。どんな考え? – m33ts4k0z

+0

メソッド名を 'public function product()'のように変更してください。 – Mishek

+0

$ order-> getSomeProductのようにエコーすることができるシリアライズされた文字列を返し続けます。 – m33ts4k0z

0

get_product()関数が値nullを返すと、オブジェクト以外のエラーが発生します。プロパティを呼び出す前に、null値をチェックする条件を追加してみてください。

+0

getProduct関数は、オブジェクトではなくシリアル化された配列を返します。 nullではなく、ただのオブジェクトではありません。 i.exで値にアクセスできます。 $ order-> getProduct-> carrierの代わりに$ order-> getProduct ['carrier']を使用します。これは1日前に起こりました。どんな考え? – m33ts4k0z

関連する問題