2016-11-03 10 views
0

レコードが「授業時間表」に保存された後にメールを送信したいと思います。しかし、私は非常に奇妙な行動を取っている。 私のテストページでは、エラー(非オブジェクトのプロパティを取得しようとしています)が 'Packages'テーブルにあるアイテムの数に基づいているように見えることがわかりました。 2つのパッケージがある場合、MessageSentイベントは電子メールを一度送信します。その後、エラーが発生します。 (時にはエラーが 'GetFullName(lessonhours_id)'への呼び出しが呼び出されます。)4つのパッケージがある場合、私は3つの電子メールなどを送信することができます。 挿入されたログファイルを除いて、 MessageSentイベントも同様に発生します。いくつかのレコードが作成された後、何らかの形で関連するプロパティが見えなくなっているように見えるので、何らかの関係の不具合があるようです。私はパッケージとレッスンと1対1の関係を持っています。私は 'Tinker'を使うと、関係の仕事を見ることができます。どんな洞察にも感謝します。Laravelとの関係の競合5

ティンカーコード:

$ php artisan tinker 
Psy Shell v0.7.2 (PHP 5.5.9-1ubuntu4.19 — cli) by Justin Hileman 
>>> $les = App\Lessonhours::first(); 
=> App\Lessonhours {#662 
    id: 1, 
    created_at: "2016-11-03 13:16:42", 
    updated_at: "2016-11-03 13:16:42", 
    players_id: 1, 
    packages_id: 1, 
    signup_date: "2016-09-06", 
    } 
>>> $les = App\Lessonhours::first(); 
=> App\Lessonhours {#664 
    id: 1, 
    created_at: "2016-11-03 13:16:42", 
    updated_at: "2016-11-03 13:16:42", 
    players_id: 1, 
    packages_id: 1, 
    signup_date: "2016-09-06", 
    } 
>>> $les->players->getFullName($les->players_id) 
=> "Girltest Testfam" 
>>> $les->packages->name 
=> "04 Pack Pvt" 
>>> 

Lessonhoursモデル:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Lessonhours extends Model 
{ 
    protected $fillable = array('signup_date', 'players_id', 'packages_id'); 

    public $table = "lessonhours"; 

    public function players() 
    { 
     return $this->belongsTo('App\Players', 'id'); 
    } 

    public function packages() 
    { 
     return $this->belongsTo('App\Packages', 'id'); 
    } 

    public function hoursused() 
    { 
     return $this->hasMany('App\Hoursused', 'lessonhours_id'); 
    } 

    protected $dates = ['signup_date']; 


} 

パッケージモデル:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Packages extends Model 
{ 
    public $table = "packages"; 
    protected $fillable = ['name', 'cost', 'numberofhours', 'type']; 

    public function lessonhours() 
    { 
     return $this->hasMany('App\Lessonhours', 'packages_id'); 
    } 
} 

イベントMessageSent:

use App\Events\Event; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 
use App\Lessonhours; 

class MessageSent extends Event 
{ 
    use SerializesModels; 

    /** 
    * Create a new event instance. 
    * 
    * @return void 
    */ 
    public function __construct(Lessonhours $lessonhours) 
    { 

     $this->lessonhours = $lessonhours; 
     $this->player = $lessonhours->players->getFullName($lessonhours- >players_id); 
     $this->email = $lessonhours->players->family->email; 
     $this->package = $lessonhours->packages->name; 
    } 

リスナー:

public function handle(MessageSent $event) 
{ 
    $lessonhours = $event->lessonhours; 
    $player = $event->player; 
    $email = $event->email; 
    $package = $event->package; 

    Mail::send('admin.email.lessonhoursnotification', ['name' => $lessonhours], function($message) use ($player, $email, $package){ 

     $message->from('[email protected]', 'Lesson Mgmt'); 
     $message->to($email, $player); 
     $message->subject('Lesson Package Update'); 

    }); 
} 

First Insert with Two Packages

Error thrown on the new record

答えて

0

問題があなたのLessonhoursモデルであるように見えます。 belongsTo()の2番目のパラメータは、現在のテーブルの親のキーを参照する列にする必要があります。だから、次のようになります。

public function players() 
{ 
    return $this->belongsTo('App\Players', 'players_id'); 
} 

public function packages() 
{ 
    return $this->belongsTo('App\Packages', 'packages_id'); 
} 

Docs

+1

私はデータベースをリセットするたびに、レコードの最初のカップルは、私は播種どのように多くのパッケージに応じて動作しますので、それは本当に私を投げたと思います。助けてくれてありがとう。電子メールは今送信しています。 – wdarnellg

関連する問題