2016-11-03 5 views
0

'수업 시간'테이블에 레코드를 저장 한 후 전자 메일을 보내려고합니다. 그러나 나는 매우 이상한 행동을 취하고있다. 내 테스트 페이지에서 (패키지가 아닌 테이블의 속성을 얻으려는) 오류가 'Packages'테이블에있는 항목 수에 따라 발생하는 것으로 나타났습니다. 두 개의 패키지가있는 경우 MessageSent 이벤트가 발생하여 전자 메일을 한 번 발송합니다. 그 후에 오류가 시작됩니다. (때로는 오류가 '회원 함수 getFullName (lessonhours_id)'호출이 올라와있다.) 내가 4 패키지를 가지고, 나는 3 이메일 등을 보낼 수 있습니다 ... 삽입 된 로그 파일을 제외하고 레코드가 데이터베이스에 삽입된다. MessageSent 이벤트도 발생합니다. 어떻게 든 관련 속성이 몇 개의 레코드가 만들어지면 보이지 않게되는 것처럼 보이는 일종의 관계 글리치가있는 것 같습니다. 나는 Packages and Lessonhours와 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

문제가 당신의 Lessonhours 모델처럼

Error thrown on the new record

답변

0

것 같습니다. belongsTo()의 두 번째 매개 변수는 현재 테이블에서 부모 키를 참조하는 열이어야합니다. 그래서되어야합니다 :

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

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

Docs

+1

나는 데이터베이스를 재설정 할 때마다, 기록의 처음 몇 내가 시드 얼마나 많은 패키지에 따라 작동 것이기 때문에 그것은 정말 나를 던졌다 같아요. 도와 주셔서 감사합니다. 지금 이메일이 발송 중입니다. – wdarnellg