我有一个Laravel项目,我创建了两个表(产品和类别),并通过一对多的关系将它们相互关联。 One Category有很多产品。我创建了一个名为ProductsController的CRUD控制器,并将图像存储在Laravel应用程序中的公共文件夹中。
当我尝试检索特定类别的存储图像并在视图中显示时,问题就开始了。 请协助。
类别模型
class Category extends Model
{
protected $fillable = ['name'];
public function products(){
return $this->hasMany('App\Product');
}
}
产品型号
class Product extends Model
{
protected $fillable = ['name', 'desctiption' , 'size', 'category_id'];
public function category()
{
return $this->belongsTo(Category::class);
}
}
的ProductsController
public function store(Request $request)
{
$formInput=$request->except('image');
//validation
$this->validate($request,[
'name'=>'required',
'size'=>'required',
'description' => 'required|min:12',
'price'=>'required',
'category_id' => 'required',
'image'=>'image|mimes:png,jpg,jpeg,gif|max:100'
]);
//Instantiate a new Project called Product
$product = new Product;
//Add the products to the Object
$product->description = $request->description;
$product->name = $request->name;
$product->price = $request->price;
$product->category_id = $request->category_id;
$product->size = $request->size;
//Save all the items to the database
$product->save();
//image upload and save in folder in our app
$image=$request->image;
if($image){
$imageName=$image->getClientOriginalName();
$image->move('images',$imageName);
$formInput['image']=$imageName;
}
Session::flash('message' , $request->name . ' has been successfully added');
Product::create($formInput);
return redirect()->route('product.create');
}
public function show($id)
{
$items = Category::find(6)->products()->where('images' , true)->get();
return view('front.index', compact('items'));
}
Front.index视图
@foreach($items as $item)
<img src="{{ url('images', $item->image) }}">
@endforeach
答案 0 :(得分:1)
在本地文件夹中的图像
$imageNames = time().'.'.$request->image->getClientOriginalExtension();
$request->image->move(public_path('uploads'), $imageNames);
第一次更改; Product :: create($ formInput); to
$oroduct=new Product;
$product->image= $imageName;
和@foreach($ items as $ item) image)}}&#34;&gt; @endforeach to
<img src="{{ URL::to('/uploads/'.$items->image) }}"/>
上传是本地文件夹,你保存图像..在你的情况下可能是不同的
答案 1 :(得分:0)
首先检查/public/images
文件夹下的图像是否可用
如果是这样,请尝试以这种方式访问它们:
<img src="{{ asset('images/'.$item->image) }}">
注意:
如果图像没有保留在数据库中,那是因为你正在使用Product :: create而不是在$ fillable数组中包含图像,所以它不能被大量分配!
注2:
您可以将图像上传到公共文件夹,以便使用我创建的此功能从公共目录访问它们,您可以在验证后使用2个参数 调用它(来自请求的图像文件)以及从公共文件夹到保存位置的相对路径 ,它将返回您可以在数据库中保留的文件名:
public function upload_image($request['image'], $folder='images'){
$filename = time().'.'.$image->getClientOriginalExtension();
$image->move(public_path($folder), $filename);
return $filename;
}
希望有所帮助:)
答案 2 :(得分:0)
尝试改为
Product::create($formInput);
类似
$product->image = $imageName;
$product->save();