Laravel получить значение из моей функции в модели - PullRequest
0 голосов
/ 13 января 2019

В моей модели Dispatch есть поле invoice_id. Это внешний ключ, поэтому я могу получить детали счета, используя следующий код:

protected $fillable = [
    'id',
    'truck_no',      
    'driver_name',      
    'driver_phone',      
    'gps_details',      
    'invoice_id',      
];

public function invoice(){
    return $this->belongsTo('App\Invoice')->select('id','invoice_no','permit_id');
}

Теперь я хочу получить значение allow_id из invoice (), чтобы я мог использовать его для получения сведений о разрешении.

allow_id = идентификатор модели разрешения

Поэтому я использую приведенный ниже код для получения разрешительных данных.

public function permit(){
    return $this->hasOne('App\Permit','id',$this->invoice()->permit_id);
}

Обновление:

У моей модели счета-фактуры:

class Invoice extends Model
{
    protected $fillable = [
        'id',
        'invoice_no',
        'invoice_date',
        'permit_id',
    ];

    public function permit(){
        return $this->hasOne('App\Permit', 'id', 'permit_id');
    }
}

Модель моего разрешения:

class Permit extends Model
{
    protected $fillable = [
        'permit_type',
        'permit_no',
        'application_no',  
        'supply_unit', 
        'supply_unit_id' ,  
     ];

    public function supplyunit(){
        return $this->hasOne('App\SupplyUnit','id','supply_unit_id');
    }
}

И согласно предложениям я добавил ниже код в моей модели отправки:

 class Dispatch extends Model
  {
    protected $fillable = [
        'id',
        'truck_no',      
        'driver_name',      
        'driver_phone',      
        'gps_details',      
        'invoice_id',      
    ];

    public function invoice(){
        return $this->hasOne('App\Invoice','id','invoice_id');
    }

    public function permit(){
        return $this->hasOne('App\Permit','id','permit_id');
    }
  }

Но это не работает. Что я должен сделать, чтобы достичь вышеизложенного? Есть ли другие решения, пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Изменить эту строку

return $this->belongsTo('App\Invoice')->select('id','invoice_no','permit_id');

Для

return $this->belongsTo('App\Invoice');

И добавьте следующий код в инвойс

public function permit(){
return $this->belongsTo('App\Permit');
}

И вы можете получить доступ как

Dispatch::find($id)->invoice->permit->id;

Или, если вам нужна вся информация

Dispatch::find($id)->invoice->permit;
0 голосов
/ 13 января 2019

Предполагая, что каждый счет имеет одно разрешение, определение ваших отношений должно выглядеть следующим образом:

public function permit(){
    return $this->hasOne('App\Permit', 'id', 'permit_id');
}

Редактировать: если счет-фактура принадлежит разрешению, которое является обратным, ваши отношения будут выглядеть так:

public function permit(){
    return $this->belongsTo('App\Permit', 'permit_id');
}

Редактировать: Основываясь на вашем обновленном вопросе, я думаю, что вы неправильно поняли определения отношений. Должно работать следующее:

Поскольку в App\Dispatch имеется столбец invoice_id, это означает, что каждый App\Dispatch принадлежит счету.

В App\Dispatch ваше определение отношений должно быть следующим:

public function invoice() {
    return $this->belongsTo('App\Invoice');
}

// permit does not belong to `App\Dispatch` as a direct relationship
// it should be removed

В App\Invoice ваше определение отношений должно быть следующим:

public function dispatch() {
    return $this->hasOne('App\Dispatch');
}

public function permit() {
    return $this->belongsTo('App\Permit');
}

В App\Permit ваше определение отношений должно быть следующим:

public function invoice() {
    return $this->hasOne('App\Invoice');
}

Чтобы затем получить идентификатор разрешения из модели Счета-фактуры, вы должны сделать

$invoice->permit->id; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...