Потому что в первом случае у вас текст по идее получается. А-ля '2' а не 2.
Только в предыдущем вопросе у вас все наоборот.
Покажите миграцию для vagprice. А именно ключевого индекса по которому работает find.
Можно попробовать экранировать Number по старинке)
А еще лучше не использовать такие названия переменных. Я сегодня так с type намучался в vue. Может и совпадение конечно.
public function up()
{
Schema::create('vagprices', function (Blueprint $table) {
$table->timestamps();
$table->string('NUMBER')->unique();
$table->string('NUMBER2')->nullable();
$table->string('WEIGHT')->nullable();
$table->string('VPE')->nullable();
$table->string('VIN')->nullable();
$table->string('NL')->nullable();
$table->string('TITLE')->nullable();
$table->string('TEILEART')->nullable();
});
}
Модель
class vagprice extends Model
{
use HasFactory;
protected $fillable = ['NUMBER','NUMBER2','WEIGHT','VPE','VIN','NL','TITLE','TEILEART'];
//public $timestamps = false;
protected $primaryKey = 'NUMBER';
public $incrementing = false;
protected $keyType = 'string';
}
Пробовал по разному, приведение типов
(string)$NUMBER
strval($NUMBER);
Если присваивать переменной $NUMBER значение вручную
$NUMBER = 1; или $NUMBER = '1'; работает, если присваивать перемнной значение из массива и даже применять приведение типов, неработает
А в вопросе пишете, что 0... Удалённо такие проблемы решать очень сложно. Дело точно не в типе значения, потому что Laravel его сам приводит при запросе. Если не работает значение из CSV, но работает просто хардкод, значит, проблема в значении из CSV. У вас там, BOM, может, или пробелы?
Тарас Паращук, могу 2 вещи только предположить.
1) попробуйте следующий запрос.
$id = csvarr[0][0] //поменяйте название переменной
dd($id) //посмотрите внимательнее на данные, пробелы, например, переносы строк
$result = vagprice::where('NUMBER', $id)->get()
2) проблема видимо в парсинге csv, какие нибудь кодировки, переносы, пробелы и прочее.
Кажется докопался,но до конца не понял
Присваивание переменной из массива дает тип string(4) "1"
$id = $csvarr[0][0]; // получается string(4) "1"
При этом
$id = 1; // тип int(1) -- работает
$id ='1'; // string(1) "1" -- работает
$id='120060050' // string(9) "120060050" -- и тоже бл.. работает
Значит получается добавляются ненужные символы из массива
когда присваивать переменной значение из массива, string(4) "1"
Почему так делается, в CSV файле в первой строке единственная цифра 1.
Как это исправить ?
Действительно файл был сохранен в формате UTF-8-BOM, как только сохранил в UTF-8, все нормально
А можно программно удалять пробелы , могу и сам найти, но может вы лучше посоветуете. ППц,
$id = trim($id,"\t\n\r\0\x0B"); -- не удаляется , все равно string(4) "1"