Я пытаюсь удалить запись базы данных через связанную модель, используя ->delete()
, но запись не удаляется.Невозможно удалить модель в Laravel с помощью Eloquent
Я попытался изменить форму с POST на DELETE, но это не имело никакого значения. И исследования вокруг SO тоже ничего не дали.
Предпочтительно, я хотел бы избежать использования Model::destroy($ids)
, , который действительно работает.
Методы маршрута:
// Delete an asset
public function getDelete($id)
{
// Try to find the asset, throw exception if not found
$asset = Asset::findOrFail($id);
$this->layout->title = 'Delete an asset';
$this->layout->content = View::make('asset.delete')
->with('assetID', $id);
}
// Delete the actual asset
public function postDelete()
{
$id = Input::get('AID');
// Try to find the asset, throw exception if not found
$asset = Asset::findOrFail($id);
// Attempt to delete it
if($asset->delete())
{
return Redirect::route('asset')
->with('success', 'The asset has been deleted succesfully!');
}
return Redirect::route('asset')
->with('failure', 'The asset could not be deleted. Please try again.');
}
Маршруты:
/* Route to deleting an asset
* Shorthand: URL::route('deleteAsset')
* Uses AssetController::getDelete
*/
Route::get('/asset/delete/{id}', array(
'as' => 'deleteAsset',
'uses' => '[email protected]'
));
/* Route to actually deleting an asset
* Shorthand: URL::route('deleteAssetPost')
* Uses AssetController::postDelete
*/
Route::delete('/asset/delete/', array(
'as' => 'deleteAssetPost',
'uses' => '[email protected]'
));
Модель:
class Asset extends Eloquent
{
public $timestamps = false;
protected $table = 'Asset';
protected $primaryKey = 'AID';
protected $fillable = array('ACID', 'AKID', 'AATID', 'APurchaseDate');
// Retrieve the customer's name associated with the asset
public function customer()
{
return $this->hasOne('Customer', 'CID', 'ACID');
}
// Retrieve the asset type that is associated with the asset
public function assetType()
{
return $this->hasOne('AssetType', 'ATID', 'AATID');
}
// Get the customer name
public function getCustomerName()
{
return $this->customer()->first()->CName;
}
// Get the asset type name
public function getAssetTypeName()
{
return $this->assetType()->first()->ATName;
}
// Get the associated key
public function getKey()
{
return $this->AKID === -1 ? 'nvt' : $this->AKID;
}
// Get the purchase date in readable form
public function getPurchaseDate($format = 'd-m-Y')
{
return date($format, strtotime($this->APurchaseDate));
}
}
В соответствии с контроллером удаление успешна и дает сообщение об успешном ,
Ошибок не возникает.
[править]
Кто-нибудь знает, что я здесь отсутствует, чтобы сделать эту работу?
После регистрации запросов, следующие запросы выполняются с помощью $asset->delete()
:
select * from `Asset` where `AID` = ? limit 1
delete from `Asset` where `AID` = ?
Я попробовал то же самое с Asset::destroy($id)
, результаты от являются:
select * from `Asset` where `AID` = ? limit 1
select * from `Asset` where `AID` in (?)
delete from `Asset` where `AID` = ?
Это сложный вопрос - все выглядит правильно для меня. Когда вы говорите, что это не удается, что вы имеете в виду? Вы сказали, что метод '-> delete()' возвращает true, поэтому, предположительно, он терпит неудачу (т. Е. Строка не удаляется). Ваша модель не использует мягкие удаления, но вы должны убедиться, что это не так. Также может потребоваться выполнить регистрацию ваших SQL-запросов, чтобы вы могли видеть: 1) если какой-либо SQL выполняется и 2) если да, то что он пытается сделать. – alexrussell
@alexrussell Это точно, как вы это описываете. В нем говорится, что он удалил строку, но на самом деле это не так. Моя модель действительно не использует мягкие удаления, и я еще не изучил их. Я попробую выполнить регистрацию запроса и вернуться к вам. – MisterBla
@alexrussell Я редактировал свой вопрос с помощью зарегистрированных запросов. – MisterBla