Laravel save () возвращает true, но не обновляет записи

9

Я использую Eloquent для обновления моей таблицы Opportunity,

Модель возможностей

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Opportunity extends Model {

protected $primaryKey = 'OpportunityID';

protected $table = 'opportunitys';
// relationships
public function csfs()
{
    return $this->hasMany('App\Csf', 'opportunityID');
}

public function benefits()
{
    return $this->hasMany('App\Benefit', 'opportunityID');
}

public function risks()
{
    return $this->hasMany('App\Risk', 'opportunityID');
}

public function projects()
{
    return $this->belongsTo('App\Project', 'projectID');
}

public static function createNewOpportunity($input, $projectID)
{
    $opportunity = new Opportunity;
    $opportunity->value = $input['value'];
    $opportunity->margin = $input['margin'];
    $opportunity->duration = $input['duration'];
    $opportunity->tender_type = $input['tender_type'];
    $opportunity->likelihood_of_success = $input['likelihood_of_success'];
    $opportunity->scope_of_work = $input['scope_of_work'];
    $opportunity->deliverables = $input['deliverables'];
    $opportunity->projectID = $projectID;
    $opportunity->high_level_background = $input['high_level_background'];
    if($opportunity->save())
        {
            Opportunity::leadSalesOppComplete($projectID);
            return true;
        };

}

public static function leadSalesOppComplete($projectID)
{
    $task = Lead::where('projectID', '=', $projectID)->first();
    $task->sales_opp = true;
    return $task->save();
}

}

public function updateOpportunity(Request $request, $id) {

Я получаю идентификатор и нахожу эту возможность.

$something = Opportunity::find($id);

Я умер и сбросил это, и я получаю это

Opportunity {#259 ▼
 #primaryKey: "OpportunityID"
#table: "opportunitys"
#connection: null
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:12 [▼
"opportunityID" => 11
"value" => 0
"margin" => 0
"tender_type" => ""
"likelihood_of_success" => 0
"high_level_background" => ""
"scope_of_work" => ""
"deliverables" => ""
"duration" => ""
"projectID" => 6
"created_at" => "2015-03-11 17:45:47"
"updated_at" => "2015-03-11 17:45:47"
 ]
  #original: array:12 []
#relations: []
#hidden: []
#visible: []
#appends: []
#fillable: []
#guarded: array:1 []
#dates: []
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}

Это правильно. Затем я обновляю их с помощью

    $something->margin = $request['margin'];
    $something->duration = $request['duration'];
    $something->tender_type = $request['tender_type'];
    $something->likelihood_of_success = $request['likelihood_of_success'];
    $something->scope_of_work = $request['scope_of_work'];
    $something->deliverables = $request['deliverables'];
    $something->high_level_background = $request['high_level_background'];

Теперь, если я умру и сваливаю, я получаю

Opportunity {#259 ▼
#primaryKey: "OpportunityID"
#table: "opportunitys"
#connection: null
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:12 [▼
"opportunityID" => 11
"value" => "25000"
"margin" => "0"
"tender_type" => "Proposal"
"likelihood_of_success" => "0"
"high_level_background" => ""
"scope_of_work" => ""
"deliverables" => ""
"duration" => ""
"projectID" => 6
"created_at" => "2015-03-11 17:45:47"
"updated_at" => "2015-03-11 17:45:47"
]
#original: array:12 [▼
  "opportunityID" => 11
  "value" => 0
  "margin" => 0
  "tender_type" => ""
  "likelihood_of_success" => 0
  "high_level_background" => ""
  "scope_of_work" => ""
  "deliverables" => ""
  "duration" => ""
  "projectID" => 6
  "created_at" => "2015-03-11 17:45:47"
  "updated_at" => "2015-03-11 17:45:47"
]
#relations: []
#hidden: []
#visible: []
#appends: []
#fillable: []
#guarded: array:1 []
#dates: []
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}

Я только изменил значение, которое показывает изменение.

Теперь я запускаю

$something->save();

Возвращает true, когда я умираю и выгружаю его.

Но в базе данных не записываются никакие записи.

Любые идеи?

два изображения из tinker

Изображение 28101

Изображение 28102

Изображение 28103

  • 1
    Что такое массив $ request? Какие-нибудь ценности в этом?
  • 0
    В laravel-5 вы используете класс Request для всех сообщений, он похож на старый вход в laravel 4.2.
Показать ещё 23 комментария
Теги:
eloquent
laravel-5

2 ответа

12
Лучший ответ

Эта строка в модели Opportunity исправила проблему.

Protected $primaryKey = "opportunityID";

Хотя трудно понять, почему все еще можно было восстановить данные и создать новую запись.

  • 0
    Такое ощущение, что это как-то связано с кодировкой вашей базы данных / таблицы. Метод save() использует where из компоновщика запросов Laravel для создания запроса со свойствами вашего объекта. Так что, в конце концов, это не Laravel, а только выполнение запроса с ключами, которые вы установили. Теперь ваша кодировка таблицы может изменить ситуацию, как правило, рекомендуется utf8_general_ci , чтобы utf8_general_ci этой проблемы.
2

У меня была очень похожая проблема, и это сообщение привело меня к решению. Я тоже переопределял primaryKey.

Среда:

Операции

SELECT и INSERT работают с protected $primaryKey = 'USER_ID';, однако операции UPDATE не работали, хотя save() вернулся true.

После обнаружения этого сообщения я изменил случай. protected $primaryKey = 'USER_ID';, Whammy, все три операции работают! Хотелось бы, чтобы у меня было более четкое объяснение, почему это работает. Когда я создал таблицу, я явно использовал верхний USER_ID VARCHAR2(50 BYTE) NOT NULL.

  • 0
    Это решит мою проблему! Но я не знал, что, черт возьми, происходит с моим кодом !!! Спасибо, в любом случае

Ещё вопросы

Сообщество Overcoder
Наверх
Меню