2015-04-11 2 views
3

Привет, laravel не вставляет правильное значение в сводную таблицу для многих-многих случаев.Laravel красноречивый нетрадиционный столбец не работает

Вот мой первый модель

class ShippingAddress extends Eloquent { 
    protected $guarded = array('id'); 
    protected $table = 'shippingAddress'; 

    public function mwsOrder() 
    { 
    return $this->belongsToMany('MwsOrder', 
     'mwsOrders_shippingAddress', 
     'Address_id', 
     'AmazonOrderId' 
    ); 
    } 
} 

Вторая модель

class MwsOrder extends Eloquent { 
    protected $table = 'mwsOrders'; 
    protected $primaryKey = 'AmazonOrderId'; 

    public function shippAddress() 
    { 
    return $this->belongsToMany('ShippingAddress', 
     'mwsOrders_shippingAddress', 
     'AmazonOrderId', 
     'Address_id' 
    ); 
    } 

} 

EER Схема enter image description here

Теперь, когда я запускаю этот

$mwsOrder = new MwsOrder; 
$mwsOrder->AmazonOrderId = 'Eve 6'; 
$mwsOrder->save(); 

$address = new ShippingAddress; 
$address->name = 'Naruto Uzumaki'; 
$address->save(); 
$address->mwsOrder()->attach($mwsOrder); 
//$mwsOrder->shippAddress()->save($address); 

Laravel THR РМО ошибка, и это то, что Laravel пытается выполнить запрос

(SQL: вставить в mwsOrders_shippingAddress (Address_id, AmazonOrderId) значений (1, 3))

Что мне нужно, чтобы произвести это запрос

вставки в mwsOrders_shippingAddress (Address_id, AmazonOrderId) значения (1, 'Eve 6')

Обновление: схемы являются:

Schema::create("shippingAddress", function(Blueprint $table) 
{ 
    $table->increments("id"); 
    $table->string("Name"); 
    $table->timestamps(); 
}); 

Schema::create("mwsOrders", function(Blueprint $table) 
{ 
    $table->increments("id"); 
    $table->string("AmazonOrderId")->unique(); 
    $table->timestamps(); 
}); 

Schema::create("mwsOrders_shippingAddress", function(Blueprint $table) 
{ 
    $table->increments("id"); 
    $table->string("AmazonOrderId"); 
    $table->foreign("AmazonOrderId")->references("AmazonOrderId")->on('mwsOrders'); 
    $table->integer("shipping_address_id")->unsigned(); 
    $table->foreign("shipping_address_id")->references('id')->on('shippingAddress'); 
    $table->timestamps(); 
}); 
+0

Не следует ли заказ местного и иностранного ключа будут перевернуты общественная функция shippAddress() { возвращение $ this-> belongsToMany ('ShippingAddress', 'mwsOrders_shippingAddress', 'AmazonOrderId', AmazonOrderId 'Address_id' ); } – Arlind

+0

i намеренно изменил его, я попробовал все четыре комбинации изменения coloumns, но все же laravel выбирает поле id вместо «AmazonOrderId» – Abdullah

ответ

1

На первое изменение shippAddress к этому:

// Specify the primary key because it's not conventional id 
protected $primaryKey = 'AmazonOrderId'; 

public function shippAddress() 
{ 
    return $this->belongsToMany('ShippingAddress', 
     'mwsOrders_shippingAddress', 
     'AmazonOrderId', 
     'Address_id' 
    ); 
} 

Тогда вы можете попробовать это:

$mwsOrder = new MwsOrder; 
$mwsOrder->AmazonOrderId = 'Eve 6'; 
$mwsOrder->save(); 

$address = new ShippingAddress(['name' => 'Naruto Uzumaki']); 
$mwsOrder->shippAddress()->save($address); // Save and Attach 
+0

сначала я использовал «AmazonOrderId» перед «Adress_id», но он все еще не wokring, он захватывает фактический id coloumn вместо «AmazonOrderId» из таблицы «MwsOrder» – Abdullah

+0

@xam, проверьте обновленный ответ. –

+0

звучит как решение для меня правильно, я перехожу к версии 5, вы скоро обновите его, когда это будет сделано, спасибо – Abdullah

Смежные вопросы