2017-05-06 94 views
7

laravel numaralı telefondan acımasın, bunun sorumu birisi için tuhaf olabilir. Benim sorum, Laravel Model sınıfında, taşıma işleminden sonra veritabanında herhangi bir alan oluşturmayacak bir varlığı nasıl yazabilirim. ÖrneğinLaravel Modelinde NotMapped varlık nasıl yazılır?

class JobseekerModel extends Model 
{ 
    use SoftDeletes; 
    protected $table='dbl_jobseekers'; 
    protected $primaryKey='id'; 
    protected $fillable=[ 
     'FirstName', 
     'MiddleName', 
     'LastName', 
     'Dob', 
     'Education', 
     'DesireField', 
     'Skill', 
     'SpecialSkill', 
     'Experience', 
     'Location', 
     'HomeAddress', 
     'Salary', 
     'Comenteries', 
     'Resume' 
    ]; 
    protected $dates = ['deleted_at']; 
} 

için Bu şimdi ancak ben bir veritabanı sütunu olarak oluşturmak için sevmiyorum, benim Modeli 'PagedListSize' adlı başka bir özellik eklemek istiyorum, benim Modelidir. Peki bunu nasıl yaparım?

Mesela bunu yapmak Ben mümkün bunu nasıl

Yani
[NotMapped] 
public int PagedListSize {set; get;} 

gibi yazıldığı, .Net Framework içinde NotMapped özelliğini kullanmak için bilen birisi. Bunu laravelde yapmanın bir yolu var mı? Laravel 5.4

+1

Daha spesifik olabilir misiniz? Hesaplanması gereken şeylere ihtiyacınız var mı? Yoksa bir sınıfın basit mülküne mi ihtiyacınız var? – huuuk

+0

Veritabanındaki sütunu oluşturmayan bir sınıfın basit özelliğine ihtiyacım var. Bununla birlikte, verileri "Denetleyici" den "görüntülemeye" ve "denetleyiciye" çevirebiliyorum.Bazı özellik kullanımlarımda bu özelliği kullanacağım. başka hiçbir şey. – gdmanandamohon

+0

@lazycoder sorgunuzda, serileştirilecek özelliklerin nerede olduğunu söylediniz? Kabul edilen cevabın benim ile sahip olduğu tek fark olduğundan, sınıfın json verisine dönüştürülmesinde özelliklerin nasıl serileştirilebileceğini açıklar. –

cevap

0

bunu yapmanın en iyi yolu: Burada

$tag->full_name = "Christos Lytras"; 
echo $tag->first_name; // prints "Christos" 
echo $tag->last_name; // prints "Lytras" 

bir tamirci ekran görüntüsü Laravel, custom Mutators'dan geçer. Ek olarak, mutatorlar, modelin json veya dizi çıkış dökümünde görüntülenecek şekilde yapılandırılabilir. Örneğin. PagedListSize için biz olabilir:

public functionGetPagedListSizeAttribute() 
{ 
    return #some evaluation; 
} 

protected $appends = array('pagedListSize'); 

Bu şekilde, pagedListSize tek model Json veya Array olarak serialized olduğunda kullanılabilir olması da bir alan olarak doğrudan kullanılabilir fakat olmayacaktır.

+0

Bu benim beklediğim şey buydu !!!!!! – gdmanandamohon

2

Üzerinde çalışıyorum Korumalı özellikleri Laravel Modeline ekleyebilirsiniz, alan adları ile çarpışmadıkça iyidir. Ayrıca, Laravel ile geçiş, modellere değil, DB yapılarına karar veriyor, bu yüzden otomatik olarak alanlar oluşturma riskini alamıyorsunuz (aslında, varsayılan modeller kutunun dışında bir özellik olmadan çalışır).

DÜZENLEME: varsayılan paketi Örnek User.php

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    /** 
    * You can add some properties here 
    * will require getter and/or setters 
    * does not need to be fillable 
    */ 
    protected $someLogicalProperty; 

} 

gerçek db yapısı taşıma (2014_10_12_000000_create_users_table.php) 'de tarif edilmektedir:

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('email')->unique(); 
    $table->string('password'); 
    $table->rememberToken(); 
    $table->timestamps(); 
}); 

Görüldüğü gibi, zaman damgaları ve jeton kullanıcı modelinde bile listelenmez. Tanımlandığında tüm doldurulabilir, kullanıcı nesnesinde ($user->name = 'Bob';) public özelliği olarak seçilebilir, ancak bunu create()/save() miras alınan yöntemlere argüman olarak da iletebilirsiniz). Varlıklar doğrudan Laravel'de erişilmez, ancak burada var ve gerekirse daha fazla belirtilebilir.

+0

Bu çözümle ilgili bir kod önerebilir misiniz? – gdmanandamohon

4

Bu tür özel özelliklerin, Laravel'deki veritabanı alanlarına eşlenmesini sağlayacak şekilde özel Mutators oluşturabilirsiniz.

class Tag extends Model 
{ 
    public function getFullNameAttribute() 
    { 
     return $this->first_name.' '.$this->last_name; 
    } 

    public function setFullNameAttribute($value) 
    { 
     list($this->first_name, $this->last_name) = explode(' ', $value); 
    } 
} 

ve modelini başlatmak sonra o zaman bu gibi kullanabilirsiniz:

Artisan Tinker Example